JS分两种数据类型:zhufeng666
-
基本数据类型 7 种:
Number、String、Boolean、Null、 Undefined、Symbol(ES6),这些类型可以直接操作保存在变量中的实际值。
-
引用数据类型 6 种:
Object(Object 类型、Array 类型、Date 类型、RegExp 类型、Function 类型、error 等)
判断数据类型的四种通用方式
-
typeof xxx 用来检测xxx的基础数据类型,有六种结果:
"number","string","boolean","undefined","function","object"
-
xxx instanceof yyy 检测某个实例xxx是否属于某个类yyy(js内置的几个对象类,包装类String,Number,Bolean除外)(在其原型链上),
1 instanceof Number ====>false
new Number(1) instanceof Number ====>true
-
原型链继承
function Fn(){定义实例的私有属性}
Fn.prototype = 父类;(如 [])
var f = new Fn() // f此时为一个对象,f就会有自己的私有属性,还有父类的属性
则有 : f.__proto__ --->Fn.prototype(即arr) --->Array.prototype --> Object.prototype
-
xxx.constructor 检测xxx的构造函数,可以检测基本数据类型 ,只找最近的一层,找到后就不再向上找了;找不到再向上找;如果原型中的constructor被重写了,就会检测错误
/^s/.constructor === RegExp ===>true
/^s/.constructor === Object ===>false
-
Object.prototype.toString.call(xxx)
返回 "[object xxx的类型]" ,是最准确最常用的方式,对基础类型和引用类型都有效,不受原型改变的影响
Object.prototype.toString.call([ ]) === "[object Array]"; // true
数组的单独判断
-
Array.isArray(obj) (ES 5.1推出的,不支持IE6~8)
Array.isArray([]); // true
Array.isArray([1]); // true
Array.isArray(new Array());
// 鲜为人知的事实:其实 Array.prototype 也是一个数组。
Array.isArray(Array.prototype);
// 下面的函数调用都返回 false
Array.isArray();
Array.isArray({});
Array.isArray(null);
Array.isArray(undefined);
Array.isArray(17);
Array.isArray('Array');
Array.isArray(true);
Array.isArray(false);
Array.isArray({ __proto__: Array.prototype });
======================================================================
附记
-
number 的 toString :
不带参数,将number 转为 string ,(128).toString() ----> '128'
带参数,转为进制的数后再转为字符串 ,(128).toString(8) ---> '156725', 将128转为8进制
对于Number,RegExp,String,Date,Function,Array的tiString()都是仅仅将当前数据类型转为字符串;
对于Math(使用的是Object原型上的toString),Object的toString()会得到当前数据的类型 ----> "[object 类型]"
-
DOM原型链 :
div.proto --->HTMLDivElement.prototype --> HTMLElement.prototype --> Element.prototype --> Node.proototype --> EventTarget.prototype --> Object.prototype
null 和undefined 所属的类分别是 Null 和 Undefined,但是浏览器将这两个类保护起来,不允许访问,访问就报错
网友评论