JavaScript的七种数据类型
JavaScript的七种数据类型分别为:undefined
、null
、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。在ES6中又引入了新的原始数据类型Symbol,标识独一无二的值,
const num = 10;
const str = "10";
const object = new Object();
const symbol = Symbol();
const boolean = true;
console.log(typeof num); //number
console.log(typeof str); //string
console.log(typeof object); //object
console.log(typeof symbol); //symbol
console.log(typeof boolean); //boolean
console.log(typeof unde); //undefined
console.log(typeof null); //object
JavaScript类型检测
- "typeof":使用方法如上代码
- “instanceof”:用于判断一个变量是否某个对象的实例
console.log([1,2] instanceof Array); //true
function Person(){}
function Student(){}
Student.prototype = new Person();
const tom = new Person();
console.log(tom instanceof Person); //true
const jack = new Student();
console.log(jack instanceof Student); //true
console.log(jack instanceof Person); //true
- "Object.prototype.toString"
console.log(Object.prototype.toString.apply([1,2])); //[object Array] console.log(Object.prototype.toString.apply(function(){})); //[object Function] console.log(Object.prototype.toString.apply(null)); //[object Null] console.log(Object.prototype.toString.apply(undefined)); //[object Undefined]
JavaScript数据类型的比较
"===" 绝对等于号:首先判断等号两边的数据类型是否相同,如果不通直接返回false,如果相同再判断两边的内容是否相当
console.log(null === null); //true
console.log(undefined === undefined); //true
//数据类型相同,但是指向不同
console.log(new Object() === new Object()); //false
//NaN是比较特殊,跟任何数据相比都是不等于
console.log(NaN === NaN); //false
console.log(+0 === -0); //true
“==”不严格等于号:类型相同时同“===”,不同时会自己进行隐式转换
//number-string
console.log(1 == "1.0"); //true
//number-boolean
console.log(0 == false); //true
console.log(1 == true); //true
//对象转为基本数据类型
console.log(new Object("hi") == "hi"); //true
console.log(new Object(5) == 5); //true
//null - undefind
console.log(null == undefined); //true
上面两种方法都有自己的缺点,前者的NaN
不等于自身,以及+0
等于-0,后
者会自动转换数据类型。JavaScript 缺乏一种运算,在所有环境中,只要两个值是一样的,它们就应该相等。
ES6 提出“Same-value equality”(同值相等)算法,用来解决这个问题。Object.is
就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致
console.log(Object.is('str','str')); //true
console.log(Object.is({},{})); //false
不同之处只有两个:一是+0
不等于-0
,二是NaN
等于自身。
console.log(+0 === -0); //true
console.log(NaN === NaN); //false
console.log(Object.is(+0,-0)); //false
console.log(Object.is(NaN,NaN)); //true
可以利用隐式转换规则进行一些数据类型的转换
console.log(typeof (10+"")); //string
console.log(typeof ("10"-0)); //number
JavaScript包装对象
基本数据类型string,number,boolean可以转化为原始数据类型,比如
const str = 'string';
console.log(str.length); //6
str.t = 10;
console.log(str.t); //undefined
当str尝试作为对象去调用方法时,javascript会将它转化为对应的包装类型,调用完成后,会再进行销毁,所以再次调用它赋值的属性会是undefind