JavaScript概念

JavaScript是什么

JavaScript是一种基于对象和事件驱动具有相对安全性的客户端脚本语言。是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。

对象:

万事万物都是对象

对象三要素:

  1. 属性:用来描述一个对象的外观特征
  2. 方法(主动行为):对象自己本身所具备的能力
  3. 事件(被动行为):对象自己接受到一种指令需要完成的一种行为

解析执行与编译执行

编译执行:将代码编译成CPU认识的文件(语言)后整体执行。

解析执行:一行一行解析,解析一行执行一行。

弱类型脚本语言

脚本语言:弥补编译语言不足而存在的,作为补充语言,不用编译

弱类型语言:简单理解定义一个变量,可以有多种数据类型 (var temp)

前端三大模块

HTML:页面结构
CSS:页面表现:元素大小、颜色、位置、隐藏或显示、部分动画效果
JavaScript:页面行为:部分动画效果、页面与用户的交互、页面功能

JavaScript基础入门

JavaScript嵌入方式

行间事件(主要用于事件)

<input <input type="button" name="" onclick="alert('ok!');">

页面Script标签嵌入

<script type="text/javascript">
  var a = ' 你 好 !'; 
  alert(a);
</script>

外部引入标签

<script type="text/javascript" src="js/index.js"></script>

JAvaScript的变量

JavaScript变量声明用‘var’

初始化变量 var 变量名=值

变量的命名规则

驼峰命名规则:

getElementById/matherAndFather/aaaOrBbbAndCcc

遵从规则:

  • 变量名必须字母或下标号‘_’或者‘$’为开头
  • 变量名长度不能超过255个字符
  • 变量名中不允许使用空格,首个字不能使用数字
  • 不用使用脚本语言中保留的关键字及保留符号作为变量名。
  • 变量名区分大小写。(javascript 是区分大小写的语言)
  • 汉语可以作为变量名。但是不建议使用!!!(low)
  • 变量、函数、属性、函数参数命名规范:
  • 区分大小写
  • 第一个字符必须是字母、下划线(_)或者美元符号($)
  • 其他字符可以是字母、下划线、美元符或数字

JavaScript数据类型及转换

JavaScript数据类型分为两类:基本数据类型特殊数据类型

基本数据类型

  • 数字型(Number型)
  • 字符串型(String型)
  • 布尔型(Boolean型)
  • 空值(null型)
  • 未定义值( undefined)
数字型(Number型)

数字型(Number型)是最基本的数据类型。在JavaScript中与其他程序设计语言(C和Java)的不同之处在于,其并不区分整数类型(int)和浮点型数据(float)。在JavaScript中所有的数字都由浮点型表示。

整型数据

整型数据指数据形式为十进制整数,包括0和负数。如0、-100、20,都是“整形数据”

浮点型数据

指带有小数的数据

浮点数还可以使用指数法表示,即实数后加E或e

2.2e12 //2.2的12次方
5.5E11 //5.5的11次方
字符串型(String型)

用来表示文本的类型,用单双引号定界,由单引号定界的可以含有双引号,由双引号定界的可以含有单引号

布尔型(Boolean型)

布尔型(Boolean型)只有两个真(true)或假(false)。0可以看做false,1可以看做true

空值(null型)

整形、浮点型等数据在定义时系统都会分配一定的内存空间

未定义值( undefined)

如果一个变量虽然已经用var关键字声明了,但是并没有对这个变量进行赋值,而无法知道这个变量的数据类型,因此这个变量的数据类型是undefined,表示这是一个未定义数据类型的变量。

复合/复杂/特殊的数据类型
  • object 对象类型
    function 函数类型

数据类型转换

数字型转换字符型var a=11;

var c=a+’’;

var c=a.toString();

字符型转换数字型 var b=“123” var d=“123abc”

var c=parseInt(b) 转换成整形数字类型

var c=parseFloat(b); 转换成浮点型数字类型

var c=Number(d);

var c=+d;

编译型语言和解释型语言之间的区别

1、程序控制权不同:

对于解释型语言而言,程序运行时的控制权在解释器(jre,.net)而不再用于程序。编译型语言对于编译器而言,运行时的控制权在用户程序。

2、运行速度不同:

一些网页脚本,服务器脚本以及辅助开发接口这样的对速度要求不高,对不同系统的兼容性有一定要求的程序则通常使用解释性语言,如Java、JavaScript、VBScript、Perl、Python、Ruby、Matlab等等。

编译语言由于程序执行速度快,同等条件下对系统的要求比较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++,Pascal/Object Pascal(Delphi)等都是编译型语言。

3、移植性不同:

解释型语言,例如Java语言,Java程序首先通过编译器编译成class文件,如果在Windows平台上运行,则通过Windows平台上的Java虚拟机(VM)进行解释。如果运行在Linux平台上,则通过Linux平台上的Java虚拟机进行解释执行。

所以说能跨平台,前提是平台上必须要有相匹配的Java虚拟机。如果没有Java虚拟机,则不能进行跨平台。

编译型语言,例如C语言,用C语言开发程序后,需要通过编译器把程序编译成机器语言(即计算机可以识别的二进制文件,因为不同的操作系统识别的二进制文件是不同的),所以C语言程序进行移植后,需要重新编译(如Windows编译成ext文件,Linux编译成erp文件)。

JS代码写在head中和写在body中的区别

由于html的加载顺序是从上到下的顺序进行加载的,因此在head中的javascript代码在页面还没加载完成时就已经被加载,而写在body中的javascript需要在整个页面加载完成之后才能被加载,所以在javascript代码不需要被立即执行时就可以放在head中,但是,如果javascript代码需要被立即执行就需要放在body中,不然按照从上打下的执行顺序就会报错,而不需要立即执行的代码放在head和放在body中的效果是相同的

JS中new关键字的用法

在有上面的基础概念的介绍之后,在加上new操作符,我们就能完成传统面向对象的class + new的方式创建对象,在javascript中,我们将这类方式成为Pseudoclassical。
基于上面的例子,我们执行如下代码

var obj = new Base();

new操作符具体干了什么呢?其实很简单,就干了三件事

var obj = {}; **obj.__proto__ = Base.prototype;** **Base.call(obj);**

第一行,我们创建了一个空对象obj
第二行,我们将这个空对象的__proto__成员指向了Base函数对象prototype成员对象
第三行,我们将Base函数对象的this指针替换成obj,然后再调用Base函数,于是我们就给obj对象赋值了一个id成员变量,这个成员变量的值是”base”,关于call函数的用法,请参看陈皓《Javascript 面向对象编程》文章

1、堆(heap)2、栈(stack)
是堆内存的简称。
是栈内存的简称。

栈,线性结构,后进先出,便于管理。堆,一个混沌,杂乱无章,方便存储和开辟内存空间

运算符

算数运算符

+, -, *, /, % , ++ , –

变量名++(–)先赋值后运算 ++(–)变量名先运算后赋值

赋值运算符

= , +=, -= ,*=, /= , %=

a+=b即为a=a+b; a%=b即为a=a%b

比较运算符

< , >, ==, >=, <= , ===, !=

返回结果为 true/false 是布尔类型(Boolean类型)

三目运算符、条件运算符、三元运算符

条件?true:false;

流程语句

顺序结构: 从上到下 从左到右 执行

选择结构: 4种

单向选择结构:

if(条件){语句体}

var a=b
if(a==b){
    alert(a=b)
}

双向选择结构:

if(条件){语句体}else{语句体}

var a=b
if(a==b){
    alert("a等于b")
}
else{
    alert("a不等于b")
}

多分支选择结构:

if(条件){语句体}else if(条件){语句体}else if(条件){语句体}else{语句体}

var a=b
if(a==b){
    alert("a等于b")
}
else if(a>b){
    alert("a大于b")
}
else{
   alert("a既不大于也不等于b") 
}