常用的原生函数:
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三者显示的结果相同
```
- 你不知道的JS上
- 第一部分 第三章 函数作用域和块作用域
- 第一部分 第四章 提升
- 第一部分 第五章 闭包
- 第二部分 第一章 关于this
- 第二部分 第二章 this全面解析
- 第二部分 第三章 对象
- 第二部分 第五章 原型
- 第二部分 第六章 行为委托
- 你不知道的JS中
- 第一部分 第二章 值
- 第一部分 第三章 原生函数
- 第一部分 第四章 强制类型转换
- 第一部分 第五章 语法
- 第二部分 第一章 异步
- 第二部分 第三章 Promise
- 第二部分 第四章 生成器
- 第二部分 第五章 性能
- 你不知道的JS下
- 第一部分 总结
- 第二部分 第二章 语法
- 第二部分 第三章 代码组织
- 第二部分 第四章 Promise
- 第二部分 第五章 集合
- 第二部分 第六章 新增API
- 第二部分 第七章 元编程
- 第二部分 第八章 ES6之后