企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
常用的原生函数: String() Number() Boolean() Array() Object() Function() RegExp() Date() Error() ``` var a = new String("abc"); a; //{0: "a", 1: "b", 2: "c"} (String{"abc"}) typeof a; //object a.toString(); //abc Object.prototype.toString.call(a); //[object String] ``` #### 一、内部属性[[class]] 所有typeof为object的对象(或数组)都包含这个属性 ``` var a = [1, 2, 3]; var b = {a: 1, b:2}; var c = null; Object.prototype.toString.call(a); //[object Array] a.toString(); //1, 2, 3 Object.prototype.toString.call(b); //[object Object] b.toString(); //[object Object] Object.prototype.toString.call(c); //[object Null] c.toString(); //TypeError Object.prototype.toString.call(undefined); //[object Undefined] undefined.toString(); //TypeError //基本类型一样可以使用[[class]],它们被各自的原生函数包装了 Object.prototype.toString.call("abc"); //[object String] Object.prototype.toString.call(42); //[object Number] Object.prototype.toString.call(true); //[object Boolean] //函数也是如此 var e = function(){} e.toString; //"function(){}" Object.prototype.toString.call(e); //[object Function] ``` #### 二、封装对象释疑 使用封装对象(原生函数)时要注意一些特殊情况,如Boolean所创建的变量永远是true,及时它接收的参数为false ``` var a = new Boolean(false) if(!a){//永远不会走到这里} ``` #### 三、获取封装对象的值 ``` var a = new String("abc"); var b = new Number(42); var c = new Boolean(true); a; //String{"abc"} b; //Number{42} c; //Boolean{true} a.valueOf(); //"abc" b.valueOf(); //42 c.valueOf(); //true ``` #### 四、原生函数作为构造函数(尽量避免,最好用字面量方式) 当Array只有一个参数时,该参数作为数组的长度而不是数组的内容 ``` var a = new Array(1, 2, 3); //[1, 2, 3] var b = new Array(3); //[empty * 3] //至少有一个空单元的数组就是稀疏数组,比如[1, undefined, 3] var a = new Array(3); var b = [undefined, undefined, undefined]; var c = []; c.length = 3; // a\b\c三者显示的结果相同 ```