变量类型前端
原型与原型链(继承)数组
做用域和闭包安全
异步闭包
ES6/7新标准的考察架构
JavaScript 是一种弱类型脚本语言,所谓弱类型指的是定义变量时,不须要什么类型,在程序运行过程当中会自动判断类型。异步
最新的 ECMAScript 标准定义了8种数据类型:函数
七种基本数据类型:this
true
和 false
.null
与Null
、NULL
或变体彻底不一样。42
或者 3.14159
。注意:原始类型不包含 Object,因此原始类型有七种。spa
typeof
类型判断typeof xxx
获得的值有如下几种类型:undefined
、boolean
、number
、string
、object
、function
、symbol
,比较简单,再也不一一演示了。这里须要注意的有三点:线程
typeof null
结果是 object
,实际这是 typeof
的一个bug,null 是原始值,非引用类型。typeof [1, 2]
结果是 object
,结果中没有 array
这一项,引用类型除了 function
其余的所有都是 object
。typeof Symbol()
用 typeof
获取 symbol
类型的值获得的是 symbol
,一种实例是惟一且不可改变的数据类型,这是 ES6 新增的知识点。instanceof
继承判断用于实例和构造函数的对应。例如判断一个变量是不是数组,使用typeof
没法判断,但可使用[1, 2] instanceof Array
来判断。由于,[1, 2]
是数组,它的构造函数就是Array
。同理:
function Dog(name) { this.name = name } var hashiqi = new Dog('哈士奇') console.log(hashiqi instanceof Dog) `
除了原始类型,ES 还有引用类型,上文提到的 typeof
识别出来的类型中,只有 object
和 function
是引用类型,其余都是值类型。注意:Symbol
也是值类型,实例的惟一标识。
var a = 1; var b = 2; b = a; a++; b++; console.log('a',a); console.log('b',b); // 打印结果: a 2 b 2
上述示例中,a , b 为值类型,在a赋值给b的时候,b的值修改成了1,a++,与b++以后,a、b成为了2。
var a = {name:'张三',age:4}; var b = {name:''王五,age: 12}; a = b; a.age++; console.log('a', a); console.log('b', b); // 打印结果 a {name:'王五',age: 13} b {name:'王五',age: 13}
上述示例中,a , b为引用类型,在b赋值给a的时候,a的地址指向了b,因此a: {name:'王五',age: 12},a的年龄加上后就变为了12而非5。
这就是由于Number
类型的a
是按值传递的,而Object
类型的b
是按引用传递的。
如图所示:
num1 与 str1 是值类型,obj 是引用类型,从图来看应该就知道值类型与引用类型赋值时的区别了,而引用类型采用这种方式也大大节约了内存,毕竟一大大的对象过多会致使这样的问题。