JavaScript

  • 三、基本概念
  • 3.1 语法
  • 3.1.1 区分大小写
  • 3.1.2 标识符
  • 3.1.3 注释
  • 3.1.4 严格模式
  • 3.1.5 语句
  • 3.2 关键字和保留字
  • 3.3 变量
  • 3.4 数据类型
  • 3.4.1 typeof 操作符
  • 3.4.2 Undefined类型
  • 3.4.3 Null类型
  • 3.4.4 Boolean类型
  • 3.4.5 Number类型
  • 3.4.5.1 浮点数值
  • 3.4.5.2 数值范围
  • 3.4.5.3 NaN
  • 3.4.5.4 数值转换
  • 3.4.6 String类型
  • 3.4.6.1 字符字面量
  • 3.4.6.2 字符串不可变
  • 3.4.6.3 转换为字符串
  • 3.4.7 Object类型
  • 3.5 操作符
  • 3.5.1 一元操作符
  • 3.5.1.1 递增和递减操作符
  • 3.5.1.2 一元加、减操作符
  • 3.5.2 位操作符
  • 3.5.2.1 按位非 ~
  • 3.5.2.2 按位与 &
  • 3.5.2.3 按位或 |
  • 3.5.2.4 按位异或 ^
  • 3.5.2.5 左移 <<
  • 3.5.2.6 有符号右移 >>
  • 3.5.2.7 无符号右移 >>>
  • 3.5.3 布尔操作符
  • 3.5.3.1 逻辑非 !
  • 3.5.3.2 逻辑与 &&
  • 3.5.3.3 逻辑或 ||
  • 3.5.4 乘性操作符
  • 3.5.4.1 乘法
  • 3.5.4.2 除法
  • 3.5.4.3 求模
  • 3.5.5 加性操作符
  • 3.5.5.1 加法
  • 3.5.5.2 减法
  • 3.5.6 关系操作符
  • 3.5.7 相等操作符
  • 3.5.7.1 相等和不相等
  • 3.5.7.2 全等和不全等
  • 3.5.8 条件操作符
  • 3.5.9 赋值操作符
  • 3.5.10 逗号操作符
  • 3.6 语句
  • 3.6.1 if语句
  • 3.6.2 do-while语句
  • 3.6.3 while语句
  • 3.6.4 for语句
  • 3.6.5 for-in语句
  • 3.6.6 label语句
  • 3.6.7 break和continue
  • 3.6.8 with语句
  • 3.6.9 switch语句
  • 3.7 函数
  • 3.7.1 参数
  • 3.7.2 没有重载


三、基本概念

3.1 语法

3.1.1 区分大小写

3.1.2 标识符

  • 变量、函数、参数、属性的名称
  • 有字母、下划线、数字、$组成,但不能以数字开头
  • 推荐使用驼峰命名(第一个字符小写)

3.1.3 注释

  • 单行注释 //
  • 块注释
    第2、3行的 * 号非必需,提高注释的可读性
/*
* 2
* 3
*/

3.1.4 严格模式

  • ECMAScript 5引入的概念
  • 启用严格模式
    编译指令
<script>
	"use strict";//即启用严格模式
</script>

3.1.5 语句

  • 不要求分号结尾,但尽量使用,保证压缩代码时不会出错
  • 尽量使用代码块,意图清晰

3.2 关键字和保留字

  • 不能选取关键字和保留字作为标识符

3.3 变量

  • javascript的变量为松散类型,改变变量值的时候可以同时改变数据类型
  • 可以用一条语句定义多个变量
  • var message = “hi” , found =false , age = 29 ;
  • 未声明直接赋值会成为全局变量,但在严格模式下会报错
  • message = " hi "
  • 变量污染
           全局变量过多,会增大与其他JS应用程序中的全局变量产生冲突的几率
  • 创建一个唯一的全局变量,相当于一个名称空间,之前的全局变量可以作为该名称空间变量对象的一个属性
  • 函数将全局变量包裹

3.4 数据类型

  • 简单数据类型
  • Undefined
  • Null
  • Boolean
  • String
  • Number
  • 复杂数据类型
  • Object

3.4.1 typeof 操作符

  • 返回字符串
  • “undefined”
  • 未初始化
  • 未声明直接使用
  • “boolean”
  • “number”
  • “string”
  • “object”
  • 对象
  • null
  • “function”

3.4.2 Undefined类型

  • 该类型只有一个数据值 undefined
  • 由于未声明的变量使用 typeof 操作符时也会返回 “undefined”,所以还是应该显式初始化变量,这样当typeof操作符返回"undefined"时就能明确知道是未声明的变量
  • 这里的显示初始化变量是指
  • 将String类型赋值为空字符串
  • 将Number类型赋值为0
  • 将Boolean类型赋值为false
  • 将Object类型赋值为null

3.4.3 Null类型

  • 该类型只有一个数据值 null
  • 空指针对象
  • 意在保存对象的变量还没有真正保存对象
  • undefined == null 返回true
  • undefined派生自null,比较时会转换操作数

3.4.4 Boolean类型

  • 任意数据类型都可以通过调用 Boolean() 函数转化为Boolean类型

数据类型

true

false

String

非空字符串

空字符串

Number

非零数字

0和NaN

Object

任意对象

null

Undefined


undefined

3.4.5 Number类型

  • 进制
  • 八进制
  • 字面值第一位必须是0
  • 在严格模式下会抛出错误
  • 十六进制
  • 字面值以0x开头

3.4.5.1 浮点数值

  • 若浮点数值本身表示的是整数,则该值自动转换为整数
var floatNumber = 10.0;
alert(floatNumber);//10
  • 计算有误差
var a= 0.1;
var b=0.2;
alert(a+b);//0.30000000000000004

3.4.5.2 数值范围

  • 超过范围会自动转化为+Infinity / -Infinity
  • isFinity() 返回Bollean类型
  • 最大/最小值
  • Number.POSITIVE_INFINITY
  • Number.NEGATIVE_INFINITY

3.4.5.3 NaN

  • 任何涉及NaN的操作都会返回NaN
  • NaN与任何值都不相等,包括NaN本身
  • isNaN()
           参数可以是任意类型,会先尝试转化为数值
  • 参数为object
  • 先调用valueOf(),判断是否可以转化为number
  • 若不能,则将valueOf的返回值作为参数调用toString()方法,再判断返回值

3.4.5.4 数值转换

  • Number()
    可用于任意类型
  • bool
  • null,返回0
  • undefined,返回NaN
  • string
  • 只包含数字 (忽略前后空格)
  • 转换为十进制,忽略前导0
  • 包含十六进制格式
  • 空字符串(忽略前后空格),返回0
  • 除此之外,返回NaN
  • object
  • valueOf
  • toString() 再使用string规则
  • parseInt()
           只用于处理string类型,转化依据:是否符合数值模式,即尽可能把数值转化出来
  • 会自动去除前导空格
  • 从第一个是数字的字符开始,到第一个不是数字的字符结束,即提取第一个数字段。
  • 进制数
  • 不显式指定
  • 十六进制正确解析
  • 八进制
  • ECMAScript3将0开头的数字解析为八进制
  • ECMAScript5将0开头的数字解析为十进制,即0
  • 显式指定
  • parseInt ( " 056 " , 8 );
  • 没有数字段则返回NaN
  • parseFloat()
           只用于处理string类型
  • 只能解析十进制数,包括浮点数和整数
  • 整数会返回整数
  • 始终忽略前导0

3.4.6 String类型

3.4.6.1 字符字面量

  • 转义字符
    作为一个字符长度

3.4.6.2 字符串不可变

       生成新字符串并销毁原字符串

3.4.6.3 转换为字符串

  • toString()
  • 除了nullundefined类型外都能调用
  • 可接收参数设置数值的进制格式
  • String()
  • 能调用其 toString() 方法则调用,即Boolean、Number、String、Object类型
  • null,返回 " null "
  • undefined,返回 " undefined "

3.4.7 Object类型

  • 通过 new Object() 定义
  • 是所有对象的基础,即所有对象派生自Object类型
  • 具有的属性和方法
  • constructor
  • 保存构造函数,即Object()
  • hasOwnProperty(propertyName)
  • 判断给定属性是否在当前实例中存在
  • 给定属性以字符串格式指定
  • isPrototypeOf(object)
  • 是否为给定对象的原型
  • propertyIsEnumerable(propertyName)
  • 给定属性是否能使用 for - in 语句枚举
  • toLocaleString()
  • toString()
  • 返回对象的字符串表示
    ~~* 对于对象而言
  • 返回 [obejct class] 形式的字符串
  • class可以区分内置对象类型~~
  • valueOf()
  • 返回对象的String、Number、Boolean表示,即相应的简单数据类型

3.5 操作符

3.5.1 一元操作符

  • 都转化为数值

3.5.1.1 递增和递减操作符

       对任何类型的变量都可以使用

  • 类型
  • 前置型 ++a
  • 后置型 a++
  • String、Number、Boolean类型
  • 转化为数值再计算
  • 对象
  • 先调用valueOf()
  • 再调用toString()

3.5.1.2 一元加、减操作符

  • 非数值调用Number()

3.5.2 位操作符

  • 负数以二进制补码的形式保存
  • 二进制补码
  • 反码加1
  • 非数值会调用Number(),但NaN、Infinity会当作0

3.5.2.1 按位非 ~

3.5.2.2 按位与 &

3.5.2.3 按位或 |

3.5.2.4 按位异或 ^

  • 不同时为1

3.5.2.5 左移 <<

       符号位不改变,相当于乘以2的倍数

3.5.2.6 有符号右移 >>

       符号位不改变,相当于除以2的倍数

3.5.2.7 无符号右移 >>>

3.5.3 布尔操作符

3.5.3.1 逻辑非 !

       可用于任何值,必定返回Boolean

  • 两次逻辑非相当于调用 Boolean() 函数

3.5.3.2 逻辑与 &&

       不一定返回bool类型

  • 返回第一个操作数的情况(不能往下走)
  • null
  • NaN
  • undefined
  • string、boolean、number调用Boolean() 结果为false的情况
  • 否则返回第二个操作数

3.5.3.3 逻辑或 ||

       不一定返回bool类型

  • 返回第二个操作数的情况(能往下走)
  • 当第一个操作数为
  • null
  • NaN
  • undefined
  • string、boolean、number调用Boolean()返回false的情况
  • 否则返回第一个操作数

3.5.4 乘性操作符

  • 非数字时调用Number()

3.5.4.1 乘法

  • Infinity与0相乘,结果是NaN

3.5.4.2 除法

  • 0除0,结果是NaN
  • 非零有限数除以0,结果是Infinity或-Infinity

3.5.4.3 求模

  • 商为Infinity或者NaN的,余数是NaN
  • 商为0的,余数是被除数

3.5.5 加性操作符

3.5.5.1 加法

  • +0加-0,结果是+0
  • 有一个操作数是字符串,则为字符串运算,否则为数值运算

3.5.5.2 减法

  • +0减+0,结果是+0
  • +0减-0,结果是-0
  • -0减-0,结果是+0
  • 只有数值运算

3.5.6 关系操作符

  • 必定返回Boolean
  • 只有当两个操作数都是字符串时,进行字符串ascii码的比较,否则进行数值比较
  • 任何与NaN进行比较都为false

3.5.7 相等操作符

3.5.7.1 相等和不相等

       先转换为数值,再比较

  • null和undefined不进行操作数转换
  • null==undefined,返回true
  • NaN和NaN不相等
  • 两个操作数都是对象,则比较是否指向同一个对象

3.5.7.2 全等和不全等

       不转换直接比较,真正意义上的相等

  • ===
  • !==
  • null===undefined,返回false

3.5.8 条件操作符

       相当于三目运算符

3.5.9 赋值操作符

  • 复合赋值

3.5.10 逗号操作符

  • 可用于声明
  • 可用于赋值
           返回表达式中的最后一项
  • var num=(5,1,4,8,0)即var num=0
* void运算符
       返回undefined
* delete
       对象属性、数组元素、变量
	* 使用var声明的变量无法删除
	* 删除不存在的对象成员或者删除的不是对象属性、数组元素以及变量,会返回true
* in
       判断左操作数是否是右操作数中的成员,右操作数为对象或数组
* 中括号运算符 []
	* 数字字符串会转化为数字
	* 对象先调用toString()方法
	* bool值转化为对应的string类型

3.6 语句

3.6.1 if语句

3.6.2 do-while语句

3.6.3 while语句

3.6.4 for语句

  • 不存在块级作用域
{
	var i = 10;
}
alert(i);//10

3.6.5 for-in语句

  • for(var propName in window) { … }
  • 遍历对象的属性
  • 对象的值为nullundefined时在ECMAScript 3中会抛出错误,在ECMAScript 5中会忽略,不执行

3.6.6 label语句

  • label:statement

3.6.7 break和continue

  • break
  • 退出label标注的循环体
var num = 0;
outermost:
for(var i=0;i<10;i++)
{
	for(var j=0;j<10;j++)
	{
		if(i==5&&j==5){
			break outermost;
		}
		num++;
	}
}
alert(num);//55
  • continue
  • 跳过并执行label标注的循环体的下一循环

3.6.8 with语句

       将代码作用域设置到一个特定的对象中,简化多次编写同一个对象。

var qs=location.search.substring(1);
var hostName=location.hostname;
var url=location.href;
with(location){
	var qs=search.substring(1);
	var hostName=hostname;
	var url=href;
}
  • with (expression) statement;
  • 变量首先被认为是局部变量
           先statement中查找局部变量的定义,若找不到则查找expression中的对象中的属性
  • 大量使用会导致性能下降,大型应用程序不建议使用
  • 严格模式下无法使用

3.6.9 switch语句

  • case的值可以是变量和表达式
  • switch与case进行比较时使用的全等操作符

3.7 函数

       不需要定义返回值类型,可以有返回值也可以没有

  • function functionName(arg0, arg1, … argN){ statements }
  • 没有指定返回值的函数返回的是一个特殊的undefined值,即直接return,得到的是undefined

3.7.1 参数

  • 参数按实际接收得到的变量进行计算,所有参数在内部都是用arguments对象表示
  • arguments对象只是与数组类似,但不是Array的实例
  • 形参定义的作用就是为参数显式命名,方便,形参数量与实际参数数量无关,多传也可以,少传也可以,不传都可以。
  • arguments对象中值的修改,会作用于命名参数的值
  • 二者不是引用的关系,内存空间独立,只是同步的关系
  • 单向同步,形参修改不会影响arguments对象的值
  • 严格模式下,同步不起作用
function doAdd(num0,num1){
	//"use strict"
	arguments[1]=10;
	alert(arguments[0]+num1);
}
doAdd(1,2);//11
//严格模式
//doAdd(1,2);//3
  • 不能通过引用传参,所有参数传递都是值传递

3.7.2 没有重载

  • 没有函数签名的概念
  • 可以利用arguments对象的length属性间接实现内部重载