美文网首页
js的数据类型,以及如何判断它们是哪种类型

js的数据类型,以及如何判断它们是哪种类型

作者: 廊桥梦醉 | 来源:发表于2018-08-28 14:32 被阅读0次

一、js的数据类型:null 、 undefined 、number、Boolean、string、array、object,bigint

二、判断js的数据类型

(1)值类型

console.log(typeof(x));    // undefined
console.log(typeof(10));   // number
console.log(typeof('abc')); // string
console.log(typeof(true));  // boolean
console.log(typeof (null));  //object ==> 结果是object,但是属于值类型

(2)引用类型

console.log(typeof(function () { }));  //function
console.log(typeof([1, 'a', true]));  //object
console.log(typeof ({ a: 10, b: 20 }));  //object
console.log(typeof (new Number(10)));  //object

typeof对js数据的判断结果共有6种:

undefined, number, string, boolean, function, object

1、分类:

简单的值类型(不是对象):null、undefined、boolean、number、string。

复杂的引用类型(是对象):函数、数组、对象、new Number(10)、new String('10')、new Boolean(true)、正则、日期等等。

2、为什么说null不是对象呢?typeof null 的值不是object吗?是

console.log(null instanceof Object); // false

对象的定义是:若干属性的集合,而null不符合对象的定义,不是引用类型。

var nullType = null;

nullType.a = 123; // 报错 ==> Unexpected token : Cannot set property 'a' of null  at <anonymous>:3:12

综上:null不是一个对象,不是复杂的引用类型。null最初是用来表示空对象的,但是不属于对象。typeof对null的判断是js的一个bug。

三、如何判断一个变量的数据类型

1、值类型的类型判断用typeof

// 值类型

console.log(typeof(x));    // undefined
console.log(typeof(10));   // number
console.log(typeof('abc')); // string
console.log(typeof(true));  // boolean

//虽然function也是一个引用类型对象,但是可以通过typeof判断:
var fn = function() {};
console.log(typeof fn); // function

如何判断null类型?用 ===:console.log(null === null); // true,不能用 == ,因为:
console.log(null == undefined); // true
console.log(null === undefined); // false

2、引用类型的类型判断用instanceof

//引用类型
console.log(new String('string') instanceof String); // true
console.log(new Number(10) instanceof Number); // true
console.log(new Boolean(true) instanceof Boolean); // true
console.log(new Array(3,4,5) instanceof Array); // true
console.log([] instanceof Array); // true
var fn = function() {}
console.log(fn instanceof Function); // true

3、Object.prototype.toString.call( ) 方法

四、Object.prototype.toString.call()的实现原理

要获取一个对象的真实的内置类型,我们需要通过获取[[Class]]的属性值,在es5之前,该属性值只能通过Object.prototype.toString来访问,因此,通过Object.prototype.toString.call(arr),改变toString方法的this指向,从而获得对象的内置类型。

相关文章

网友评论

      本文标题:js的数据类型,以及如何判断它们是哪种类型

      本文链接:https://www.haomeiwen.com/subject/cejdiftx.html