1.&&运算符会有一个返回值,判断&&前面的表达式是否为真(布尔值)
其中undefined, null, NaN, "", 0, false 返回的都是false
2.typeof的返回值只有六种
number, string, boolean, object, undefined, function
注意:数组,null返回的是object
var a=1;
typeof(a) ; => 返回的是一个字符串"number"
typeof(typeof(a)) 相当于typeof("number") => 返回的是string
3. undefined, null 没有toString()方法
4.js运行包含三部分
第一个为语法分析
第二个为预编译
第三个为解释执行
预编译四部曲:
1.创建AO对象
(Activation Object) 执行期上下文
2.找形参和变量声明,将变量和形参名作为AO的属性名,值undefined
3.将实参值和形参相统一
4.在函数体里面找函数声明,值赋予函数体
比如解释这个如何执行:
function fn(a) {
console.log(a);
var a = 123;
console.log(a);
function a() { }
console.log(a);
var b = function() {}
console.log(b);
function d() {}
}
fn(1);
第一步创建AO对象
AO {
}
第二步:找形参和变量声明,将变量和形参名作为AO的属性名,值undefined
AO {
a:undefined,
b:undefined
}
第三步:将实参值和形参相统一
AO {
a:1,
b:undefined
}
第四步:在函数体里面找函数声明,值赋予函数体
AO {
a:function a() {},
b:undefined,
d:function d() {}
}
预编译完成,然后依次执行函数内容
第一个console.log(a); 则输出function a
第二步a=123,那么AO变成:
AO {
a:123,
b:undefined,
d:function d() {}
}
所以第二个console.log(a),输出123
第三步function a() {},因为预编译过了,所以跳过
第四步console.log(a),输出123
第五步b变成function
那么AO变成
AO {
a:123,
b:function b() {},
d:function d() {}
}
第六步打印b,输出function
///
如果是全局对象里,第一步生成为GO对象,其他一样