• JavaScript中的内部类属性和对象封装详解


    JavaScript中的原生函数、内部属性及封装对象

    JavaScript内置了一系列原生函数,其中包括String(), Number(), Boolean(), Array(), Object(), Function(), RegExp(), Date(), Error(), Symbol()等。本文将重点讲述JavaScript中的内部属性和封装对象。

    1. JavaScript内部Class属性

    在JavaScript中,所有typeof返回结果object的对象(如数组等)都包含一个名为[[Class]]的内部属性。我们无法直接访问这个属性,但可以借助Object.prototype.toString(..)来查看。

    Object.prototype.toString.call( /regex-literal/i );// "[object RegExp]"
    
    • 1

    即使对于nullundefined,我们也可以看到此类内部属性:

    Object.prototype.toString.call( null ); // "[object Null]"
    
    • 1

    注意基本类型string, number, boolean会被自动封装(boxing)成对应的对象。

    2. JavaScript对象包装

    对于字符串、数字的属性和方法如.length.toString,他们并不存在。此时就需要用到对象包装。

    var a = "abc";
    a.length; // 3
    
    • 1
    • 2

    使用new String()包装字符串后,通过typeof取得的结果可能并非你想要的。通常,我们推荐使用Xx()而不是new Xx()来包装值。

    var a = new String( "abc" );
    typeof a; // "object"
    
    • 1
    • 2

    在需要获取包装的实际值时,我们使用xx.valueOf()方法。

    var a = new String( "abc" );
    a.valueOf(); // "abc"
    
    • 1
    • 2

    使用new的方式创建封装对象通常并不推荐,除了Date(..)Error(..)等特例外。我们通常建议使用直接的字面量/常量的方式创建。

    2.1 “new Target()” 与 “Target()” 的区别

    在加不加new关键词时,String(), Number()等内置函数处理方式会区别对待。

    var a = new Number(3);
    console.log(typeof a); // 输出 "object"
    
    • 1
    • 2

    使用new,创建的是一个新的对象,而没有使用new,则进行了类型转换。

    2.2 包装 null 和 undefined

    我们可以利用Object()函数将nullundefined包装为对象。

    var n = Object(null);
    console.log(typeof n); // 输出 "object"
    
    • 1
    • 2

    2.3 拆封对象值

    所有对象都有 valueOf()toString() 方法,在尝试取对象值时会自动调用。

    3. JavaScript对象及数组的解构

    ES6引入的解构特性,使我们能够使用模式匹配进行解构和赋值,使得从数组/对象获取值变得更加简单和直观。

    3.1 数组解构

    ES6引入的数组解构语法,允许我们从数组中按位置提取值并赋值。

    let [a, b, c] = [1, 2, 3];
    
    • 1

    3.2 对象解构

    对象解构语法允许我们从对象中提取属性和值。

    let {foo, bar} = {foo: 'aaa', bar: 'bbb'};
    
    • 1

    3.3 字符串解构

    我们还可以对字符串进行解构,此时字符串会被视为一个类似数组的对象。

    const [a, b, c, d, e] = 'hello';
    
    • 1
  • 相关阅读:
    Enterprise Architect安装使用
    用低代码平台代替Excel搭建进销存管理系统
    计算机网络复习——数据链路层
    分类预测 | MATLAB实现KOA-CNN-LSTM开普勒算法优化卷积长短期记忆神经网络数据分类预测
    OTG 配置为U盘
    npm i 报错 gifsicle pre-build test failed
    【力扣刷题】Day29——DP专题
    地级市-空气流动系数数据-更新至2019(含10米风速、边界高度等)
    Js逆向教程18-l参数分解
    python计算机毕业设计之基于django的在线学习系统 elementui
  • 原文地址:https://blog.csdn.net/m0_66492535/article/details/133948660