zoukankan      html  css  js  c++  java
  • 内部属性[[class]]

    1. 对象的[[class]]属性

    所有typeof返回值为“object”的对象(如数组)都包含一个内部属性[[class]],这个属性无法直接访问,一般通过Object.prototype.toString(..)来查看。

        console.log(Object.prototype.toString.call([1,2,3]));  //[object Array]
     
        console.log(Object.prototype.toString.call(/d/));    //[object RegExp]

    多数情况下,对象的内部[[class]]属性和创建该对象的内建原生构造函数相对应,不过也不总是这样。

    2.基本类型值的[[class]]属性

    虽然Null()和Undefined()这样的原生构造函数并不存在,但是内部[[class]]属性仍然是“Null”和“Undefined”。

        console.log(Object.prototype.toString.call(null)); //[object Null]
     
        console.log(Object.prototype.toString.call(undefined)); //[object Undefined]

    其他基本类型值的情况有所不同:

        console.log(Object.prototype.toString.call("abc")); //[object String]
     
        console.log(Object.prototype.toString.call(42));  //[object Number]
     
        console.log(Object.prototype.toString.call(true)); //[object Boolean]

    基本类型值被各自的封装对象自动包装,所以他们的内部[[class]]属性分别为“String”,“Number”和“Boolean”。

    3.封装对象

    由于基本类型值没有.length和.toString()这样的属性和方法,需要通过封装对象才能访问,此时Javascript引擎会自动为基本类型值包装一个封装对象。

        //封装对象包装
        var b = 'abc';
        console.log(b.length);
        console.log(b.toUpperCase());

    一般不直接使用封装对象(即通过new操作创建基本类型值),优先考虑使用“abc”和“42”这样的基本类型值,而不是new String("abc") 和 new Number(42)。

    4.拆封

    如果想要得到封装对象中的基本类型值,可以使用valueOf()函数。

        //封装对象的拆封
        var s = new String( "abc" );
        var n = new Number( 42 );
        var b = new Boolean( true );
     
        console.log(s.valueOf());
        console.log(n.valueOf());
        console.log(b.valueOf());

  • 相关阅读:
    MySql 用户 及权限操作
    MAC 重置MySQL root 密码
    在mac系统安装Apache Tomcat的详细步骤[转]
    Maven:mirror和repository 区别
    ES6 入门系列
    转场动画CALayer (Transition)
    OC 异常处理
    Foundation 框架
    Enum枚举
    Invalid App Store Icon. The App Store Icon in the asset catalog in 'xxx.app' can’t be transparent nor contain an alpha channel.
  • 原文地址:https://www.cnblogs.com/web-record/p/10489318.html
Copyright © 2011-2022 走看看