zoukankan      html  css  js  c++  java
  • JavaScript基础原始数据类型的封装对象(013)

    JavaScript提供了5种原始数据类型:number, string, boolean, null, and undefined。对于前面3个,即number, string, 和boolean提供了封装对象,这些对象的构造函数是Number(), String(), 和Boolean()。下面的代码展示了原始数据类型和它们的封装对象之间的不同:

    // a primitive number
    var n = 100;
    console.log(typeof n); // "number"
    
    // a Number object
    var nobj = new Number(100);
    console.log(typeof nobj); // "object"
    

     封装对象提供了不少有用的功能,比如Number对象提供了toFixed() 和toExponential()等方法,String对象提供了substring(), charAt(), t和toLowerCase()等方法以及length属性。但其实原始数据类型也可以调用这些方法,因为当你试图对一个原始数据类型调用这些方法的时 候,JavaScript的运行环境会自动地把它们转换成封装对象:

    // a primitive string be used as an object
    var s = "hello";
    console.log(s.toUpperCase()); // "HELLO"
    
    // the value itself can act as an object
    "monkey".slice(3, 6); // "key"
    
    // same for numbers
    (22 / 7).toPrecision(3); // "3.14"
    

     由于原始数据类型可以完成封装对象的工作,我们没有必要在代码里new出封装对象:因为在需要的时候JavaScript运行环境会帮我们自动的转换它 们。在实际工作中需要乃至封装对象的情况比较少,只有在你需要为一个原始数据类型添加它自己的“属性”的时候,才有必要new出它的封装对象。因为如果你 无法直接使用一个原始数据类型的属性:

    // primitive string
    var greet = "Hello there";
    
    // primitive is converted to an object
    // in order to use the split() method
    greet.split(' ')[0]; // "Hello"
    
    // attemting to augment a primitive is not an error
    greet.smile = true;
    
    // but it doesn't actually work
    typeof greet.smile; // "undefined"
    

     最后说明一下,如果你不使用new来执行封装对象的构造函数,它们帮你把参数转换成一个原始数据类型:

    typeof Number(1); // "number"
    typeof Number("1"); // "number"
    typeof Number(new Number()); // "number"
    typeof String(1); // "string"
    typeof Boolean(1); // "boolean"
    

     http://maidini.blog.163.com/blog/static/3776270420093119130625/

  • 相关阅读:
    BZOJ2697 特技飞行 【贪心】
    BZOJ2795/2890/3647 [Poi2012]A Horrible Poem 【字符串hash】
    BZOJ2823 [AHOI2012]信号塔 【最小圆覆盖】
    BZOJ2924 [Poi1998]Flat broken lines 【Dilworth定理 + 树状数组】
    洛谷P3759 [TJOI2017]不勤劳的图书管理员 【树状数组套主席树】
    POJ 2955
    江南大学第三届程序设计竞赛K题
    Codeforces 894C
    Codeforces 894B
    HDU 1789
  • 原文地址:https://www.cnblogs.com/Bryran/p/3964898.html
Copyright © 2011-2022 走看看