对 JS的数据类型进行判断,首先明确JS一共有以下 7种类型:
String、Number、Boolean、null、undefined、Symbol、
Object(Function|Date|Array | RegExp…)、
const number1 = 1;
const string1 = '1';
const boolean1 = true;
const obj1 = {a:1};
const arr1 = [1,2];
const function1 = function fun(){
return 'fun'
} ;
const date = Date();
const rex = new RegExp()
const null1 = null;
const undefined1 = undefined;
const symbol1 = Symbol()'
const number2 = Number(2);
const number3 = new Number(3);(不推荐类似写法)
const string2 = String('a')
const arr2 = Array([1,2]);
const arr3 = new Array([1,2,3]);
typeof
console.log(number1,typeof number1) // 'number'
console.log(string1,typeof string1) // string
console.log(boolean1,typeof boolean1) // "boolean"
console.log(obj1,typeof obj1) // "object"
console.log(arr1,typeof arr1) // "object"
console.log(rex,typeof rex) // "object"
console.log(function1,typeof function1) // "function"
console.log(date,typeof date) // string
console.log(null1,typeof null1) // "object"
console.log(undefined1,typeof undefined1)// "undefined"
console.log(symbol1,typeof symbol1) // "symbol"
console.log(number2,typeof number2) // "number"
console.log(number3,typeof number3) // "object"
console.log('arr2',arr2,typeof arr2) // object
console.log('arr3',arr3,typeof arr3) // object
存在问题
- null 识别成 ‘object’
- function 识别成 function, date识别成 ‘string’
other:
- Number 和 String 作为普通函数调用的时候,是把参数转化为相 应 的原始数据类型,也就是类似于做一个强制类型转换的操作,而不是默认当做构造函数 调用。此时识别是相应的 number,string
- new Number(…),new String(…), new Array(…) 识别成相应的object
注意和 Array 区分,Array(…)等价于 new Array(…) ,也是 object
instanceof
instanceof 用来判断 A是否为B的实例。
表达式为: A instanceof B,如果A为B的实例,则返回true,否则返回false。
当 A 的 proto 指向 B 的 prototype 时,就认为 A 就是 B 的实例。instanceof 不能用于判断原始数据类型的数据,可以用来判断对象的类型 ```javascript console.log(number1,number1 instanceof Number) // false console.log(string1,string1 instanceof String) // false console.log(boolean1,boolean1 instanceof Boolean) // false
console.log(number2,number2 instanceof Number) // false
console.log(number3,number3 instanceof Number) // true
```