类型
1. JavaScript 的类型分为两类:原始类型(primitive type)和对象类型(object type)。
原始类型包括:数字、字符串、布尔值
2. JavaScript 中有两个特殊的原始值:null 和 undefined,它们不是数字、字符串和布尔值,它们分别代表了各自特殊类型的唯一成员。
null 是 JavaScript 的关键字,常用来表示“空值”。执行 “typeof null” 会返回 “object”。
undefined 和 null 不一样,不是关键字,是预定义的全局变量。执行 “typeof undefined” 会返回 “undefined”。
1)当变量未初始化时,会返回 "undefined"
2)当查询的对象属性 或者 数组元素不存在时,会返回 "undefined"
3)当函数没有return语句时,会返回 "undefined"
3. 类型转换
使用 ”==“ 进行比较的时候,JavaScript 会根据两个值的语义进行隐式类型转换,以下转换规则,
以下图片截取自《JavaScript: The Definitive Guide 6th Edition》,
4. 相等性测试
null == undefined // 返回 true
null == false // 返回 false
undefined == false // 返回 false
"0" == 0 // 返回 true
0 == false // 返回 true
"0" == false // 返回 true
一个值可以转换为另一个值,并不意味着两个值相等。比如,上面红色的相等性测试。
5. 变量声明
1)使用 var 关键字声明变量,例如 var i; var j = 22; 重复声明同一变量没有害处,解析器默认使用最后一个。
2)当不使用 var 声明变量时,变量默认会成为 全局对象(如果是客户端浏览器,那么全局对象就是 window)的属性。
6. 变量作用域
全局变量拥有全局作用域。
JavaScript 函数体内声明的变量存在于函数体内的任何地方,这一点与 C、C++、Java不同。例如 C 语言,
void print()
{
for(int i = 0; i < 100; i++)
{
printf("%d", i);
}
// 此处再也无法访问变量 i
}
而 JavaScript 函数依旧可以访问,
function print() {
for(int i = 0; i < 100; i++) {
console.log("i = " + i);
}
console.log("i = " + i); // i 可以正常访问,打印出 100
}
JavaScript 解释器解析函数的时候,会把函数体内声明的所有变量,全部提到函数开始处,如下