美文网首页
JavaScript原生函数

JavaScript原生函数

作者: 斯里兰卡的小狮子 | 来源:发表于2019-03-13 16:54 被阅读0次

JavaScript内建函数(原生函数):
String()
Number()
Boolean()
Array()
Object()
Function()
RegExp()
Date()
Error()
Symbol()
原生函数可以被当作构造函数来使用。new String('abc')创建的是字符串"abc"的封装对象,而不是基本类型值"abc";

var a = new String('abc');
typeof a ;   //"object"
a instanceof String;  //true
Object.prototype.toString.call(a);    //"[object,String]"

所有typeof返回值是"object"的对象都包含内部属性[[Class]](内部的一个分类,就是针对对象的一个分类,用来区分具体是哪个子对象),该属性的访问一般通过Object.prototype.toString(...)来访问。

Object.prototype.toString.call([1,2,3])   //"[object Array]"
Object.prototype.toString.call( null );  //"[object Null]"
Object.prototype.toString.call( undefined );  //"[object Undefined]"

虽然没有Null()和Undefined()这样的原生函数存在,但是对象内部属性[[Class]]属性值仍然是可以作区分。
针对基本类型的检测:

Object.prototype.toString.call( "abc" );  //"[object String]"
Object.prototype.toString.call( 42 );  //"[object Number]"
Object.prototype.toString.call( true );  //"[object Boolean]"

是不是有点奇怪?不是说只针对object对象进行区分检测的么?怎么也能检测基本类型?这里是因为基本类型值被各自的封装对象自动包装,所以他们内部[[Class]]也有属性值。
像.length,.toString方法,需要通过封装对象才能访问,此时JavaScript自动为基本类型值包装一个封装对象。

var a = "abc";
a.length; // 3
a.toUpperCase(); // "ABC"

一般情况是,JavaScript引擎自己决定什么时候应该使用封装对象,优先考虑使用基本类型值。

var a = new Boolean( false );
typeof a        //"object"
if (!a) {
   console.log( "Oops" ); // 执行不到这里
}
a.valueOf();   //false
var b = new String('abc');
var c = b+""; //c的值为“abc”

可以通过valueOf()进行封装对象的拆封(获取封装对象中的基本类型值),或者隐式转换,如上。

Object(...),Function(...),RegExp(...)尽量不要使用。

实际中没有必要使用new Object()来创建对象的,使用字面量形式更方便。

Date()和Error()
Symbol()

symbol符号是具有唯一性的特殊值,是基本类型数据的一种。Symbol()原生构造函数在自定义符号时,特殊性在于不能像Object(),Function()等使用new关键字,否则会报错!

ar ss = Symbol('my symbol');
console.log(ss);   //Symbol(my symbol)
typeof ss;   //"symbol"
ss.toString();   //"Symbol(my symbol)"
var obj = {};
obj[ss] = "miya";
Object.getOwnPropertySymbols(obj);  //[Symbol(my symbol)]

symbol符号可以作为对象的key,来存储数据。

原生构造函数的原型

比如:Array.prototype,String.prototype等。
String的prototype上面有indexOf(),charAt(),substr(),substring(),slice(),trime()等方法。
Number的prototype上有tofixed()等方法。
Array的prototype上有concat()等方法。
Function.prototype上有apply,call,bind等方法。

END:JavaScript引擎会自动对基本类型值进行封装(用封装对象来包装)来实现基本类型对属性和方法的访问。

相关文章

  • JavaScript原生函数

    JavaScript内建函数(原生函数):String()Number()Boolean()Array()Obje...

  • javascript的异常处理

    先了解一下javascript原生的异常类型 Error对象 JavaScript原生提供一个Error构造函数,...

  • JQuery简介

    一、什么是JQuery jQuery是一个JavaScript库,它通过封装原生的JavaScript函数...

  • js字符串去除两边空格,数组去重

    Javascript我们常常需要对数据处理,但是数据处理的函数,Javascript原生函数比较少,这里贴出去重和...

  • 01-jQuery简介

    一.什么是 jQuery? jQuery是一个JavaScript库,它通过封装原生的JavaScript函数得到...

  • 2018-07-30

    100个常用的javascript函数 1、原生JavaScript实现字符串长度截取 复制代码代码如下: fun...

  • 读《JavaScript初学者应注意的七个细节》

    简化代码 使用JSON作为数据格式 **尽量使用JavaScript原生函数 ** 事件委托 匿名函数 代码可配置...

  • JavaScript(四)JavaScript错误处理机制

    一、Error 实例对象 JavaScript 原生提供Error构造函数,所有抛出的错误都是这个构造函数的实例 ...

  • jquery深造二....

    一.什么是jQuery jQuery是一个JavaScript库,它通过封装原生的JavaScript函数得到一整...

  • JQuery

    jQuery是一个JavaScript库,它通过封装原生的JavaScript函数得到一整套定义好的方法。 摘自:...

网友评论

      本文标题:JavaScript原生函数

      本文链接:https://www.haomeiwen.com/subject/rmlzpqtx.html