JavaScript类型总结
1.在es5规范中,基本类型有五种:1).Null,2).Boolean,3).String,4).Number,5).Undefined
注:在es6中又添加了一个基本类型:Symbol
2.引用类型1.Object,2.Array,3.Date,4.RegExp,5.Function
3.7种语言类型:1).Null,2).Boolean,3).String,4).Number,5).Undefined,6).Symbol,7).Object。
来自:https://www.ecma-international.org/ecma-262/9.0/index.html#sec-well-known-intrinsic-objects
编程规范void 0 替代 undefined
js中你声明一个变量,eg:var a;并没有给a变量赋值,此时这个变量的值就是undefined。在js中undefined是一个变量,并不是一个关键字,我们可以随时随地的修改。这是js设计的缺陷,所以我们在平时开发中,避免这个问题,大佬们就推荐了用void0来代替undefined。
正因为undefined在js中的值是可变的,因此为了得到真正的undefined,我们就可以通过void 0 来获取。具体如下
var a= {
_void: 1,
get _Void(){
console.log(this._void);
}
};
var test = void a._Void; // 显示0
console.log(test); // 显示undefined
装箱与拆箱操作
1.定义:装箱:把基本数据类型转换为对应的引用数据类型,拆箱:把引用数据类型转换为基本数据类型
装箱
2.我们在常用的基本类型中,如String Number类型。在创建的时候,他并没有String,Number对象下的方法。而是js自动给我们进行了装箱操作。
在这个字符串a中,仅仅是一个普通的字符串,并没有String中的方法被调用。而是js为我们自动装箱,进行了如下操作。同理Number类型也是一样,但是es6中增加的symbol类型不能进行new装箱
var a = '1234';
a = new String(a);
//自己的操作
//.....调用string下的方法
//消除内存消漏问题
a = null;
拆箱
3.在拆箱操作中,可以通过valueof与toString方法实现
var a = 1234;
//装箱
a = new String(a);
//自己的操作
//....调用string下的方法
//拆箱
a.valueof();//number
a.toString();//string
总结
javascript中又很多这种小问题,有的时候工作的时候很难发现,需要沉静下来慢慢去消化和解决。