借鉴阮一峰前辈:http://javascript.ruanyifeng.com/grammar/types.html
查看MDN文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Data_structures
参考书籍:javascript高级程序设计第三版
注:本文记录个人学习所用,有错误恳请指出
一、简介
最新的 ECMAScript 标准定义了 7 种数据类型,6种原始类型(undefined,null,number,string,boolean,symbol-es6新定义)+合成类型(object)
二、null和undefined
作为两个原始类型,而且又很像……
相同点:
1.undefined和null在“==“相等运算符下返回true
console.log(undefined == null);//true
2.undefined和null在if()语句中,都会自动转为false
if(!undefined){console.log("undefined在if()中转为false!")}//undefined在if()中转为false!
if(!null){console.log("null在if()中转为false!")}//null在if()中转为false!
不同点:
1.(个人观点)undefined表示一个没有指向的指针,而null是一个指向一块内容为空的地方。
var a;
console.log(a);//undefined
var b = 5;
var c = b;
console.log("b="+b+",c="+c);//b=6,c=5
b = 6;
console.log("b="+b+",c="+c);//b=6,c=5
var d = null;
console.log(d); //null
var e = {name:"wyc"};
var f = e;
console.log("e.name="+ e.name+",f.name="+ f.name);//e.name=wyc,f.name=wyc
e.name = "wp";
console.log("e.name="+ e.name+",f.name="+ f.name);//e.name=wp,f.name=wp
delete e.name;
console.log("e.name="+ e.name+",f.name="+ f.name);//e.name=undefined,f.name=undefined
这部分纯个人理解,有错误请指导
从该段代码可以看出:
(1)var a;声明变量不赋值,默认值位undefined,var d = null;声明赋值null,才是null
(2)在给变量赋值时。解释器会先确定这个值是基本类型值还是引用类型值
(3)复制变量值时,基本类型的值和引用类型的值都是复制一份到新变量分配的空间,只不过副本不同,一个是值,一个是指针,这导致,基本类型复制完全分离开来,而引用类型复制还通过副本指向同一个对象
2.检测类型不同
console.log(typeof null); //object
console.log(typeof undefined);//undefined
补充:typeof操作符
因为javascript是松散型的,因此需要检测数据的类型——typeof
console.log(typeof undefined); //undefined
console.log(typeof null); //object
console.log(typeof 1); //number
console.log(typeof "你好"); //string
console.log(typeof true); //boolean
console.log(typeof []); //object
console.log(typeof {}); //object
function add(a,b){return a+b;}
console.log(typeof add); //function
值得注意的就是null,和function,其他都是自己基本类型名;
3.Number()转换不同
console.log(Number(null)); //0 console.log(Number(undefined));//NaN
补充:
(1)NaN(not a number)是一个特殊的数值。
(2)任何带有NaN的操作都会返回NaN
(3)NaN和任何值都不想等,包括NaN本身。
(4)isNaN()检测是否是”非数值类型“;