JS中的数据类型
一、简介
JavaScript 的数据类型,共有七种:
- 数值(number):整数和小数。
- 字符串(string):文本。
- 布尔值(boolean):表示真伪的两个特殊值,即
true(真)和false(假)。 - undefined :表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值。
- null :表示空值,即此处的值为空。
- 对象(object):各种值组成的集合。
- Symbol:表示独一无二的值。
对象是最复杂的数据类型,又可以分成三个子类型。
- 狭义的对象(object)
- 数组(array)
- 函数(function)
二、判断数据类型方法
-
typeof
- typeof返回一个值的数据类型,它的返回值是一个字符串类型
typeof 123 // "number" typeof '123' // "string" typeof false // "boolean" typeof function f() {} // "function" typeof undefined // "undefined" typeof window // "object" typeof {} // "object" typeof [] // "object" typeof null // "object"
typeof Symbol() // "symbol"
- typeof返回一个值的数据类型,它的返回值是一个字符串类型
-
instanceof
- instanceof用来判断A是否为B的实例,表达式为:A instanceof B,如果A是B的实例,则返回true,否则返回false。instanceof检测的是原型,内部机制是通过判断对象的原型链中是否有类型的原型。
-
{} instanceof Object; // true [] instanceof Array; // true [] instanceof Object; // true "123" instanceof String // false new String(123) instanceof String // truefunction instance(left,right){ let prototype = right.prototype; //获取类型的原型 let proto = left.__proto__; //获取对象的原型 while(true){ //循环判断对象的原型是否等于类型的原型,直到对象原型为null,因为原型链最终为null if (proto === null || proto === undefined){ return false; } if (proto === prototype){ return true; } proto = proto.__proto__; } } console.log(instance({},Object)); //true console.log(instance([],Number)); //false
-
constructor
- 当一个函数F被定义时,JS引擎会为F添加prototype原型,然后在prototype上添加一个constructor属性,并让其指向F的引用,F利用原型对象的constructor属性引用了自身,当F作为构造函数创建对象时,原型上的constructor属性被遗传到了新创建的对象上,从原型链角度讲,构造函数F就是新对象的类型。这样做的意义是,让对象诞生以后,就具有可追溯的数据类型。
![]()
-
Object.prototype.toString()
- toString()是Object的原型方法,调用该方法,默认返回当前对象的[[Class]]。这是一个内部属性,其格式为[object Xxx],其中Xxx就是对象的类型。
- 对于Object对象,直接调用toString()就能返回[object Object],而对于其他对象,则需要通过call、apply来调用才能返回正确的类型信息。
![]()
![]()
-
封装一个准确判断数据类型的函数:
-
function getType(obj) { let type = typeof obj; if(type !== "object") { return type; } return Object.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1')
}正则表达式里的$1,$2:
- $1,$2表达的是小括号里的内容,$1是第一个小括号里的内容,$2是第二个小括号里的内容,依此类推。
-
比如(\\d{4})(\\d{2})(\\d{2}) 匹配"20190919" $1是第一个括号里匹配的2019 $2是第二个括号里匹配的09 $3是第三个括号里匹配的19




浙公网安备 33010602011771号