最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • JavaScript数据类型判断

    正文概述 掘金(不知东方既白)   2021-01-05   508

    JavaScript之数据类型判断

    在 ECMAScript 规范中,共定义了 7 种数据类型,分为基本类型引用类型两大类,如下所示:

    基本类型: 存储在栈中

    引用类型: 存储在堆中

    引用类型除了包括Object外,还包括Array、Function、Date等等。

    1、typeof


    typeof 是一个操作符,其右侧跟一个一元表达式,并返回这个表达式的数据类型。返回的结果用该类型的字符串(全小写字母)形式表示,包括以下 7 种:numberbooleansymbolstringobjectundefinedfunction 等。

    let num = 18;
    let str = "yhd";
    let show = true;
    let sym = Symbol();
    let data = undefined;
    let info = null;
    
    console.log(typeof num); // number
    console.log(typeof str); // string
    console.log(typeof show); // boolean
    console.log(typeof sym); // symbol
    console.log(typeof data); // undefined
    console.log(typeof info); // object
    
    
    let fun = function add() {};
    let arr = ["yhd", "gsr"];
    let obj = {name: "yhd", age: "23"};
    let date = new Date();
    
    
    console.log(typeof fun); // function
    console.log(typeof arr); // object
    console.log(typeof obj); // object
    console.log(typeof date); // object
    
    

    typeof判断总结:


    2、instanceof

    instanceof 可以正确判断对象的数据类型,用来判断 A 是否为  B 的实例,表达式为: A instanceof B,如果 AB 的实例,则返回 true,否则返回 false。因为内部机制是通过判断对象的原型链中是不是能找到类型的 prototype

    let fun = function add() {};
    let arr = ["yhd", "gsr"];
    let obj = {name: "yhd", age: "23"};
    let date = new Date();
    
    console.log(fun instanceof Function); // true
    console.log(arr instanceof Array); // true
    console.log(obj instanceof Object); // true
    console.log(date instanceof Date); // true
    
    console.log(arr instanceof Object) // true
    console.log(fun instanceof Object); // true
    console.log(date instanceof Object); // true
    
    

    instanceof 能够判断出 arrArray的实例,但他也认为 arr 也是 Object 的实例,为什么呢?

    原因

    ​ 从 instanceof 中能够判断出 arr.__proto__ 指向 Array.prototype,而 Array.prototype.__proto __ 又指向了Object.prototype,最终 Object.prototype.__proto__ 指向了null,标志着原型链的结束。因此,arr、Array、Object 就在内部形成了一条原型链。

    在原型链上,arr__proto__ 直接指向Array.prototype,间接指向 Object.prototype。function、date同理。

    instanceof总结:


    3、constructor

    当一个函数被定义时,JS引擎会为函数添加 prototype 原型,然后再在 prototype上添加一个 constructor 属性,并让其指向他的构造函数

    let num = 18;
    let str = "yhd";
    let show = true;
    let sym = Symbol();
    let data = undefined;
    let info = null;
    
    console.log(num.constructor); // ƒ Number() { [native code] }
    console.log(str.constructor); // ƒ String() { [native code] }
    console.log(show.constructor); // ƒ Boolean() { [native code] }
    console.log(sym.constructor); // ƒ Symbol() { [native code] }
    console.log(data.constructor); // Cannot read property 'constructor' of undefined
    console.log(info.constructor); // Cannot read property 'constructor' of null
    
    let fun = function add() {};
    let arr = ["yhd", "gsr"];
    let obj = {name: "yhd", age: "23"};
    let date = new Date();
    
    console.log(fun.constructor); // ƒ Function() { [native code] }
    console.log(arr.constructor); // ƒ Array() { [native code] }
    console.log(obj.constructor); // ƒ Object() { [native code] }
    console.log(date.constructor); // ƒ Date() { [native code] }
    

    constructor总结:


    4、toString

    toString()Object 的原型方法,调用该方法,默认返回当前对象的 [[Class]] 。这是一个内部属性,其格式为 [object xxx] ,其中 xxx 就是对象的类型。

    对于 Object 对象,直接调用 toString() 就能返回 [object Object] 。而对于其他对象,则需要通过 call / apply 来调用才能返回正确的类型信息。

    Object.prototype.toString.call(1);    // [object Number]
    Object.prototype.toString.call('');   // [object String]
    Object.prototype.toString.call(true); // [object Boolean]
    Object.prototype.toString.call(Symbol()); //[object Symbol]
    Object.prototype.toString.call(undefined); // [object Undefined]
    Object.prototype.toString.call(null); // [object Null]
    
    Object.prototype.toString(Object); // [object Object]
    Object.prototype.toString.call(new Function()) ; // [object Function]
    Object.prototype.toString.call([]) ; // [object Array]
    Object.prototype.toString.call(new Date()) ; // [object Date]
    
    Object.prototype.toString.call(new RegExp()) ; // [object RegExp]
    Object.prototype.toString.call(new Error()) ; // [object Error]
    
    Object.prototype.toString.call(NaN) ; // [object Number]
    

    toString()总结:


    起源地下载网 » JavaScript数据类型判断

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元