美文网首页
js-原创-《JavaScript数据类型,typeof操作,O

js-原创-《JavaScript数据类型,typeof操作,O

作者: 杯雪1990 | 来源:发表于2019-01-30 12:03 被阅读0次

【一】JavaScript数据类型

1,JavaScript共有6种基本类型,也叫值类型,USBNNS:Undefined、String、Boolean、Number、Null、Symbol(ES6新增)

注意:也就是说,我们不用非要去给变量赋一个字符串的值,去区分它和别的变量的值不同,因为去给每个变量取个语义化而又不同的值是一件伤脑子的事,当我们只需要知道每个变量的值都是百分百不同的即可,这时候我们就可以用Symbol。

2,JavaScript共有3种引用数据类型,对象Object、数组Array、函数Function

【二】typeof操作符

typeof操作符返回一个字符串,表示未经计算的操作数的类型。

类型 结果
String "string"
Number "number"
Boolean "boolean"
Undefined "undefined"
Object "object"
function函数对象 "function"
Symbol(ES6新增) "symbol"
宿主对象(由JS环境提供) Implementation-dependent
["a", "b"] "object"
null "object"
NaN "number"

注意:typeof的结果共有7种,对应7种数据类型,特殊的有2种,数组Array和null都对应object

此外,还有一些数据根据创建方式的不同,typeof时会返回不同的结果

typeof 1 //'number'
typeof new Number(1) //'object'
typeof 'str' //'string'
typeof new String('str') //'object'

如果需要判断数据类型,建议使用Object.prototype.toString

【三】Object.prototype.toString

Object.prototype.toString.call(1); // '[object Number]'
Object.prototype.toString.call(new Number); //'[object Number]'
Object.prototype.toString.call([]); // '[object Array]'

封装一个靠谱的类型检测函数:

function classOf(obj) {
    return Object.prototype.toString.call(obj).slice(8, -1);
}
classOf([]); //'Array'

【四】instanceOf

instanceof运算符用于测试构造函数的prototype属性是否出现在对象的原型链中的任何位置

使用示例:

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}
var auto = new Car('Honda', 'Accord', 1998);

console.log(auto instanceof Car);
// expected output: true

console.log(auto instanceof Object);
// expected output: true

原理剖析:

function instance_of(L, R) {//L 表示左表达式,R 表示右表达式
    var O = R.prototype;// 取 R 的显示原型
    L = L.__proto__;// 取 L 的隐式原型
    while (true) { 
        if (L === null) 
            return false; 
        if (O === L)// 这里重点:当 O 严格等于 L 时,返回 true 
            return true; 
        L = L.__proto__; 
    } 
}

相关文章

网友评论

      本文标题:js-原创-《JavaScript数据类型,typeof操作,O

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