一、JS的数据类型有8种
- ES5中6种:
- 基本类型:
- Number
- String
- Boolean
- undefined
- Null
- 引用类型:
- object(包括:function、array、Date等)
- 基本类型:
- ES6中,新增Symbol。
- 这种类型的对象永不想等,即使创建的时候传入相同的值,可以解决属性名冲突的问题,作为标记。
- 谷歌67版本出现了一种bigInt。
- 指安全存储、操作大整数(但很多人不把这个作为一个类型)
PS1:undefined与null的区别:
- undefined代表:
- 一个未声明的变量
- 或 已声明但没有赋值的变量
- 或 一个并不存在的对象属性
- null
- 声明并赋值了的变量,只不过值为null(空对象指针)
PS2:什么时候给变量赋值为null呢?
- 初始赋值,表明将要赋值为对象
- 结束前,让对象成为垃圾对象(被垃圾回收器回收)
二、判断数据类型
- typeof
//可判断:number、boolean、string、undefined、function
//不可判断:null、array、object(这三个会返回object)
var a = 1;
console.log(typeof a);//"number"
var b = [1,2,3];
console.log(typeof b);//"object"
var c = null;
console.log(typeof c);//"object"
- instanceof
var a = [1,2,3];
console.log(a instanceof Array);//true
//注意:
var b = [1,2,3]
console.log(b instanceof Array);//true
console.log(b instanceof Object);//true
var c = function(){ return 1; }
console.log(c instanceof Function);//true
console.log(c instanceof Object);//true
- ===
//可判断:undefined、null
console.log(undefined===undefined);//true
console.log(null===null);//true
//结合constructor
//支持:number、string、boolean、object
//不支持:null、undefined
var a = [1,2,3];
console.log(a.constructor === Array);//true
//结合typeof
var b = [1,2,3];
console.log(typeof b === "object");//true
var c = 1;
console.log(typeof c === "number");//true
- 检验数组还可以用Array.isArray()
var a = [1,2,3];
console.log(Array.isArray(a));//true
三、不同类型之间的转换
- 转为字符串
- toString()、toLocaleString()
//支持:number、string、boolean、object
//不支持:null、undefined
var a = true;
a.toString()//"true"
-
- String()
//与toString()的区别,String()可以转换null和undefined
var a = null;
console.log(typeof String(a));//"string"
- 转为数字
- Number()
- 如果参数是 Date 对象,Number() 返回从 1970 年 1 月 1 日至今的毫秒数。
- 如果对象的值无法转换为数字,那么 Number() 函数返回 NaN。
- Number()
var test1= new Boolean(true);
var test2= new Boolean(false);
var test3= new Date();
var test4= new String("999");
var test5= new String("999 888");
console.log(Number(test1));//1
console.log(Number(test2));//0
console.log(Number(test3));//1603633385931
console.log(Number(test4));//999
console.log(Number(test5));//NaN
var test11= true;
var test22= false;
var test44= "999";
var test55= "999 888";
console.log(Number(test11));//1
console.log(Number(test22));//0
console.log(Number(test44));//999
console.log(Number(test55));//NaN
var test66= undefined;
var test77= null;
console.log(Number(test66));//NaN
console.log(Number(test77));//0