左查询和右查询
怎么区分函数声明和函数表达式:
函数声明:以function开头的具有函数的代码片段
函数表达式:不以function开头的具有函数的代码片段
- 伪数组:具有length属性的对象都叫做伪数组
- 作用域应该是“集合”
右查询:对等号非左边变量的查询
- 在整个作用域链中,如果没有找到变量的声明,直接抛ReferenceError错误。
左查询:对等号左边变量的查询
- 在整条作用域链中,如果没有找到变量的声明,js引擎会自动在全局声明一个同名变量
殊的右查询(typeof 的安全机制)
- 通常情况下,没有定义的变量a,如果输出的话会报错;但是 typeof a 就不会报错而是返回undefined。
console.log(typeof a) 返回的是 undefined - 严格模式:
左查询在严格模式下(“use strict”)依旧没有用。 - 在javascript中只有引用值传递
- 基本数据类型:总是通过值复制的方式来赋值/传递
- 引用数据类型:总是通过引用复制来完成赋值/传递
- 注意引用指向的是值而非变量,所以一个引用无法更改另一个引用的指向,但是可以更改不同变量共同指向的值!
- 包装类的基本数据类型值是不可以修改的!
- .valueOf() 表示将 拆包,就是将包装类转成基本数据类型。如果要和 == 作比较的时候,它拆完包的时候,会再调用底层的toString()方法,将其转换为字符串类型。
- 变量的提升不会搭理if条件的暗示
console.log(a); //undefined
console.log(a); //undefined
if(true){
var a=10;
}else{
var b=20;
}
- 最佳实践:在块内部不要去定义函数
装箱
var a=3;
/*这步是浏览器底层做的操作,将基本的数据类型转化为包装类,可以调用方法。*/
var a=new Number(); (浏览器帮我们自动做了)
a.toString(); //返回的类型为string类型