1语法
支持严格模式:IE10+,chrome,fire4+,safari5.1+
严格模式不能定义eval或者arguments
2数据类型
判断:typeof
-
undefined
-
boolean
-
string
-
number
-
function
-
object
Undefined类型:声明但未初始化
Null类型:表示一个空对象指针
布尔类型:其他转换为false(空字符串,0或者NAN,null,undefined)
Number类型:支持八进制,十六进制,在计算的时候,都会转化为十进制。
- 判断是否有穷:isFinite()
- NaN和任何数都不相等,包括自己;isNaN()
- 数值转换:
-
数值转换函数parseInt() parseFloat() Number();前两个只能把字符串变为数值,Number()适用于任何数据类型。parseInt() parseFloat()解析到第一个无效字符为止。
-
string转为number:
-
自动去掉前面的0
-
空字符串转为0
-
非法NaN
-
对象:
-
先调用valueOf,再调用toString
String类型
制表符
制表符\t是C++的转义符,相当于键盘上按下TAB键之间的距离,一般为8个空格。
出现问题
使用制表符后显示的长度不一致
原因
使用制表符是把输出的切入点移动到下一个能被8整除的位置上。
即当打印小于八格的结果,用空格补足八格再打印下一个结果;当大于等于八格,小于十六格,补足十六格;以此类推。
\r 的意思是: 回车。将当前位置移到本行的开头。 \f的意思是:换页。将当前位置移到下一页的开头 \b 是让光标回退一位,下一次输入字符时,会把光标所在位置的字符替换掉。
数字,布尔,对象,字符串都有toString(),对于数字toString支持输出二进制、八进制、十六进制
null和undefined的toString()返回其本身
Object类型
constructor:保存着用于创建当前对象的函数
var obj = new Object()
obj.constructor
输出:ƒ Object() { [native code] }
function Person(){}
var person = new Person()
输出:ƒ Person(){}
hasOwnProperty(name):用于检给定的属性再当前实例中是否存在(而不是再实例的原型中);参数是字符串类型
person.hasOwnProperty('name') //false
person.name = 'lan'
person.hasOwnProperty('name') //true
propertyIsEnumerable():是否可使用for-in枚举
toString()
valueOf()对象的字符串,数值,布尔值表示
isPrototypeOf()调用对象是否在另一个对象的原型链上。
function Baz() {}
var baz = new Baz();
console.log(Baz.prototype.isPrototypeOf(baz)); // true
3操作符
3.1一元操作符:++ -- + -
++和--只能应用于数字
+和-在进行非数值操作操作的时候,调用Number()
在进行对象操作的时候,先调用valueOf再调toString
3.2位操作符
按位与&、按位或|、按位非~、按位异或^,左移<<,有符号右移>>,无符号右移>>>
JavaScript 能够准确表示的整数范围在**-2^53 到 2^53 之间**(不含两个端点), 超过这个范围,无法精确表示这个整数。
左移:
2<<5 //64
-2<<5 //-64
有符号右移:
-64>>5 //-2
无符号右移:
-64>>>5 //134217726
3.3布尔操作符
逻辑非!
操作数是非空字符串,对象,非0数值,返回false
操作数是空字符串,0,null,undefined,NaN返回true
将表达式强制转换成布尔运算!!
逻辑与&&(短路操作符)
1.第一个操作数是对象,返回第二个操作数
2.两个操作数都是对象,返回第二个
3.第二个操作数是对象,只有第一个操作数结果是true的时候,才返回该对象
4.第一个操作数是null,undefined,NaN时,返回其本身
逻辑或||****(短路操作符)
1.第一个操作数是对象,返回第一个操作数
2.两个操作数都是对象,返回第一个操作数
3.两个操作数都是null,undefined,NaN时,返回其本身
3.4乘性操作符
乘*
结果是NaN:有一个是NaN,或者Infinity和0相乘
Infinity和Infinity相乘,返回本身
除/
结果是NaN:有一个是NaN,或者Infinity和Infinity相除,0被0除
非0有限数被0除,结果是Infinity或者-Infinity(符号取决于被除数)
27391793/0 //Infinity
%
结果是NaN:Infinity被Infinity除,被除数无穷大除数有限大,除数是0
被除数有限大,除数无限大,结果是被除数
Infinity%10 //NaN
10%Infinity //10
3.5加性操作符
加+ 减-
3.6关系操作符
< > <= >=
3.7相等操作符
== !=
=== !==
null==undefined //true
3.8条件操作符
? :
3.9赋值操作符
=
*=,/=,%=,+=,-=,<<=,>>=(有符号右移赋值),>>>=(无符号右移赋值)
3.10逗号操作符
声明变量
var num1 =2, num2 =5;
赋值
var num = (0,1,2,3,4) // num=4
4语句
label语句:用于和break,continue跳出循环
with语句:将代码作用域设定在一定对象中。严格模式下不能使用,会降低性能,避免使用