语法
严格模式
- 严格模式是为JavaScript定义了一种不同的解析与执行模型。
- 严格模式中,会对不确定的行为进行处理,对不安全行为抛出错误。
- 在顶部或在函数中添加
"use strict";
即启用严格模式
- 支持严格模式的浏览器有IE10+、FIreFox 4+、Safari 5.1+、Opera 12+、Chrome
变量
- 省略var操作符,即给未声明的变量赋值会使变量成为全局变量,这种写法在严格模式下会导致抛出ReferenceError错误
数据类型
typeof操作符
- typeof是检测给定变量的数据类型的操作符
- 其返回类型是字符串
Safari 5及之前版本和Chrome 7及之前版本在对正则表达式调用typeof操作符时会返回“function”,其他都会返回“object”undefined 未定义 boolean 布尔值 string 字符串 number 数值 object 对象或null function 函数
null和undefined
- null值表示一个空对象指针
- null和undefined区别参考阮一峰的网络日志
- 只要在意在保存对象的变量还没有真正保存对象,就应该明确的让该变量保存null值
Boolean类型
- 各类数据对应Boolean的转换规则
数据类型 转换为true的值 转换为false的值 Boolean true false String 任何非空字符串 ""(空字符串) Number 任何非零数字值(包括无穷大) 0和NaN Object 任何对象 null Undefined 不适用 undefined
Number类型
- Number类型的八进制字面量在严格模式下无效,抛出错误
- 浮点数值小数点后为0会默认转换为整数
var floatNum1 = 1.;//小数点后面没有数值,解析为1
var floatNum2 = 10.0;//整数,解析为10
- isNaN()参数可以是任何类型,函数确定是否“不是数值”。在接收到一个值之后,会尝试将这个值转换为数值
- 转型函数Number()可以用于任何数据类型,转换规则略
- parseInt()解析八进制字面量字符串时,ECMAScript 3认为是八进制,ECMAScript 5认为是十进制
- parseFloat()解析到末尾或第一个无效的小数点为止,即第一个小数点有效,第二个和之后都无效
String类型
- 字符串一旦创建,他们的值就不能改变
操作符
- 位操作符
按位非(NOT) ~(本质:操作数负值减1) 按位与(AND) & 按位或(OR) | 按位异或(XOR) ^ 左移 << 右移 >>(向右移动,保留符号位) 无符号右移 >>>(数值所有32位都向右移动) - 全等操作符(===)只在两个操作数未经转换就相等的情况下返回true
- for-in循环使用之前,先检测确认该对象不是null或undefined
- label语句可以和break或continue语句联合使用
outermost: for(var i=0;i<10;i++){ if(i==5){ break outermost; } else{ continue outermost; } }
- with语句的作用是将代码的作用域设置到一个特定对象中,为了简化多次编写同一个对象的工作
var qs = location.search.substring(1); with(location){ var qs = search.substring(1); }
- switch语句在比较值时使用的是全等操作符,因此不会发生类型转换(例如,字符串“10”不等于数值10)