- 有人说,JavaScript 是唯一一门可以先用后学的编程语言。
- 本书中,我们这样来定义“类型”(与规范类似):对语言引擎和开发人员来说,类型是值的内部特征,它定义了值的行为,以使其区别于其他值。
- null 是基本类型中唯一的一个“假值”(falsy 或者 false-like,参见第 4 章)类型, typeof对它的返回值为 "object" 。
我们需要使用复合条件来检测 null 值的类型:
var a = null; (!a && typeof a === "object"); // true- JavaScript 中的变量是没有类型的,只有值才有。变量可以随时持有任何类型的值。
- typeof 运算符总是会返回一个字符串:
typeof typeof 42; // "string"typeof 42 首先返回字符串 "number" ,然后 typeof "number" 返回 "string" 。- 已在作用域中声明但还没有赋值的变量,是 undefined 的。相反,还没有在作用域中声明
过的变量,是 undeclared(未声明) 的。
var a;
a; // undefined
b; // ReferenceError: b is not defined
更让人抓狂的是 typeof 处理 undeclared 变量的方式。例如:
var a;
typeof a; // "undefined"
typeof b; // "undefined"- typeof 的安全防范机制
// 这样会抛出错误
if (DEBUG) {
console.log( "Debugging is starting" );
}
// 这样是安全的
if (typeof DEBUG !== "undefined") {
console.log( "Debugging is starting" );
}- 还有一种不用通过 typeof 的安全防范机制的方法,就是检查所有全局变量是否是全局对象的属性,浏览器中的全局对象是 window,(并不是所有地方都能用window来替代typeof,如有些函数内的变量不是全局变量)
if (window.DEBUG) {
// ..
}- 还有一些人喜欢使用“依赖注入”(dependency injection)设计模式,就是将依赖通过参数显式地传递到函数中
- null,undefined,boolean,number,string,object,symbol