javascript原生函数

常用的内建函数:

String()

Number()

Boolean()

Array()

Object()

Function()

RegExp()

Date()

Error()

Symbol()

构造函数创建出来的是封装了基本类型值的封装对象

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

内部属性[[class]]

所有typeof返回值为"object"的对象都包含一个内部属性[[class]](我们可以把它看作一个内部的分类,而非传统的面向对象意义上的类)。这个属性无法直接访问,一般通过Object.prototype.toString(..)来查看

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

上例中基本类型被各自的封装对象自动包装,所以它们的内部[[class]] 属性值分别为 "String" ,"Number", "boolean".

封装对象包装

封装对象扮演着十分重要的角色,由于基本类型值没有  .length和  .toString()这样的属性和方法,需要通过封装对象才能访问,此时javascript会自动为基本类型值包装一个封装对象

如果想要自己封装基本类型值,可以使用Object(...)函数

var a = "abc";  
var b = new String( a );
var c = Object( a );

typeof a;   //"string"
typeof b;    //"object"
typeof c;    //"object"

b instanceof String;    
c instanceof String;

Object.prototype.toString.call( b );   //"[object String]"    
Object.prototype.toString.call( c );    //"[object String]"

拆封

如果想要得到封装对象中的基本类型值,可以使用valueOf()函数:

var a = new String( "abc" );
var b = new Number( 42 );
var c = new Boolean( true );

a.valueOf();  //"abc"
b.valueOf(); //42
c.valueOf(); //true

在必要的时候 javascript 会进行隐式拆封

Date(...)和Error(...)

Date()用来获得当前的时间

Error()主要是为了获得当前运行栈的上下文(大部分js引擎通过 只读属性.stack来访问)

栈上下文信息包括函数调用栈信息和产生错误的代码的行号,可以用来debug

Object(...) Function(....)  RegExg(...)

这三个并不经常使用

Symbol(...)

不能使用new来构造,直接使用Symbol()构造

原生原型

原生构造函数有自己的 .prototype对象,如Array.prototype,String.prototype

这些对象包含其对应子类型所特有的行为特征

例如,将字符串值封装为字符串对象之后,就能访问String.prototype中定义的方法

根据文档约定,我们将String.prototype.XYZ简写为 String#XYZ

String#indexOf(..)

在字符串中找到子字符串的位置

String#charAt(..)

获得字符串指定位置上的字符

String#substr(...)

获得字符串的指定部分

String#substr(..),String#substring(..) ,String#slice(..)

将字符串转换为大写或者小写

String#toUpperCase() String#toLowerCase()

去掉字符串前后的空格,返回新的字符串

String#trim()

去掉字符串前后的空格,返回新的字符串

以上方法并不改变原字符串的值,而是返回一个新的字符串,借助原型代理,所有字符串都可以访问这些方法

将原型作为默认值

Function.prototype是一个空函数,RegExp.prototype是一个空的正则表达式,而Array.prototype是一个空数组。对于为赋值的变量来说,它们是很好的默认值

function isThisCool(vals,fn,rx){
    vals = vals || Array.prototype;
    fn = fn || Function.prototype;
    rx = rx || RegExp.prototype;
    return rx.test(
        vals.map ( fn ).join( "" );
    );
}//默认值

isThisCool();

isThisCool(["a","b","c"],function(v) { return v.toUpperCase(); }, /D/) 赋给定的值

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值