语法:见解了c和java的语法
区分大小写:标识符是区分大小写的
标识符:变量名称,1第一个字符必须未字母,下划线,或者美元符号。2其它字符字母,下划线,美元符号,和数字
不能是关键字和保留字,true,false,和null
严格模式:
严格模式是根据作用域来执行如果在函数体内使用use strict 那么只在当前函数体内有效,是一个编译指示,
- 严格模式变量调用delete会报错
变量特点:
- 松散型的,可以用来保存任何类型数据。
- var 定义的变量,将成为该作用域的局部变量,周期为执行环境退出。
- 给为声明的变量赋值,在严格模式下是会抛出错误。
- 严格模式下不能定义eval/arguments
- var 存在提升
数据类型:
- 基本的数据类型:Undefined,Null,Boolean,Number和String
- 引用类型:Object
typeof操作符:
- 是一个操作符而不是一个函数
- 用typeof 检验null 会返回object
- 检测数组会返回object
- 检测函数在Chrome7之前是返回function,其它浏览器是返回object。
- 对为赋值,和未初始化的变量都会返回undefined。
Undefined类型:
只有一个特殊值undefined,为变量的默认赋值,函数的默认返回值。
Null类型:
也是只有一个值,就是null,代表一个空对象指针,而undefined值是派生字null,所以毕竟他们会返回true,这里最后使用全等符来比较。因为不会执行转换变量的一步
Boolean类型:
该类型有两个值:true && false,任何类型的数据都不会被转为Boolean值,基本的转换规则
true false
非空字符串 空字符串
任何非零数字 0/NaN
非null对象 null
undefined永远都是false
Number:
.1是有效的但是不推荐,保存浮点数是小数的两倍,所以在小数点后面没有任何有效值的时候都会被转换为整数默认的。
如:10.0会被自动转换为10
浮点数的最高精度为17位。但计算精度远不如整数。
比如0.1+0.2 并不等于0.3而是0.300000000000004.
这时候可以先将浮点数转为整数,在转为浮点数来计算。
2,数值的范围
内存的限制,不能保存世界上所有数值,所以有了最大最大小值。超出最大值转换为Infinity 最小就算-,isFinite()函数来艰涩是否为无穷大的数值。
NaN
非数值,不等于任何值,包括他本身
0/0会得到NaN而正数除以0会获取Infinity负数和它相反
isNaN不能转换为数值的都会返回true,
如果一个字符不等于它本身那他就是NaN
数值的转换
Number可以转换任何数据类型
规则中需要注意的几点:
1,如果是null将被转换为0
2,如果是undefined 返回NaN
3,会忽略前置0,如011,转为11
4,空字符会被转为0
一元操作符和Number一样
ParseInt 咋遇到第一个不是数字的时候就会返回NaN
如果是数字就会向下查找直到不是数字为止,会忽略掉非数字部分。
parseFloat 会忽略掉第二个浮点,后面的,如:22.33.3 会被转换为22.33
String
由单双引号包
/n 字符字面量
数值,布尔值,对象和字符串都可以转换为字符串,有一个toString方法,null和undedined没有。string转换任何类型为字符串
Object类型
object 类型是它所有实列的基础,object类型的所有方法和属性也都在他的实列里面
constructor 返回实例的构造函数
hasOwnProperty给点属性是否存在与该对象
isPropertyOf是否存在与他的原型上
propertyIsEnumerable 检测属性是否能够被for in 枚举
toLocaleString 返回对象字符串表示
toString 返回对象字符串表示
valueof 返回对象字符串,数值,布尔值表示。通常与toString返回一致
因为object是所有对象的而基础,所以对象都包含上面几个方法
除了宿主对象
布尔操作符
或与非
非:会将值转换为布尔值在判断
非的规则!取反
与 :真真为真。真假为假。假真为假。假假为假,即第一个操作数能够决定结果,就不会不会向下求值
或:真真为真。真假为真。假真为真。假假为真假
也是短路操作符,一个有假停止一个是有真停止
相等操作符
==和=== 不同的是==会进行一次强制转换,而===不会
复合赋值操作符如:-= +=
逗号操作符
用于赋值,1,2,3变量值为3
语句
do-while
会先执行一次
for的三个参数都是可选的
创建一个无限循环就移除上述条条件,所以如果循环的条件有问题也会造成无限循环
for-in
之前的浏览器里会对不存在的属性之间报错,停止循环,比如null,undefined都会,但是es5修复了这个问题,但是为了兼任最好先检测,在循环。
safari3会出现返回两次某个属性的bug
break和continue语句
break用于跳出循环不会在往后执行
continue跳出当前继续向后执行
switch
switch语句在比较的时候是全等比较
函数
严格模式下
1不能为函数命名为eval/arguments
2,不能把参数名名为eval/arguments
3不能出现同名参数
arguments
是对象只是数组类似,并不是Array的实列
可以利用arguments 模拟重载
arguments在非严格莫斯下会和命名参数的值保持同步,所以修改了arguments[0] 那么他的参数也会改变。
这两个只得的内存空距是独立的
js里所有参数传递都是值,不可能通过引用传递参数。
因为js里没有函数签名,所以只能用arguments模拟重载。
小结
1,数据类型
2,特殊object
3,很多类似c的基本操作符
4,控制流,if ,for deng
5,无需指定函数返回值,默认返回undefined
6,没有重载,所有参数都是按值传递,不可能为引用传递
7,可以像函数传递任何参数、
8,不存在签名,可以用arguments判断来模拟重载
目录