JavaScript原生函数浅谈
该文章阅读需要8分钟,更多文章请点击本人博客halu886
1.原生函数基本概念
1.1原生函数是什么
JavaScript为基本数据类型提供了封装对象,被称为原生函数(native function),同时也叫内建函数(built-in function)
常用的原生函数有:
- Number()
- String()
- Boolean()
- Array()
- Object()
- Function()
- RegExp()
- Date()
- Error()
- Symbol()//ES6新加入!
1.2作用是什么
为基本数据类型提供该子类所特有的方法和属性
比如说:String#trim(),Array#Array#concat()
1.3补充
原生函数同时也能当做构造函数使用
let a = new String("abc");
a instanceof String;//true
通过构造函数创建了一个封装了基本数据类型的封装对象
2.[[class]]
let a = new String("abc");
typeof a;//"object"
所有typeof返回的”object”的对象都有一个[[class]]属性
Object.prototype.toString.call(new String("abc"));//"[object String]"
Object.prototype.toString.call(new Number(1346));//"[object Number]"
Object.prototype.toString.call(null);//"[object Null]"
Object.prototype.toString.call(undefined);//"[object Undefined]"
//返回一个字符串类型的基本类型数据,格式为[object Xxxxx]
虽然不存在Null()和Undefined()原生函数,但是[[Class]]内部属性仍为这个
3.封装对象包装
当基本数据类型需要调用原生对象的方法和属性时,JavaScript会自动进行对象封装(object wrapper)
疑问:既然如此为什么不直接在变量声明时,直接定义为封装对象?
思考:
- JavaScript对基本数据类型的常见情况做了性能优化,直接使用封装对象来进行”提前优化“反而会降低执行效率
篡改数据类型,提升风险
let a = false; !!false;//false let b = new Boolean(false); !!b;//true //显性类型转换!!Object===>true
4.拆封
当需要用到封装对象的基本类型值时,就需要用到valueOf()
var a = new String("sadflk");
var b = new Number(123);
var c = new Boolean(true);
a.valueOf()//"sadflf"
b.valueOf()//123
c.valueOf()//true
在需要用到基本类型值的时候会发生隐形拆封
坚持原创技术分享,您的支持是我前进的动力!