常用的内建函数:
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]"所有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()主要是为了获得当前运行栈的上下文(大部分js引擎通过 只读属性.stack来访问)
栈上下文信息包括函数调用栈信息和产生错误的代码的行号,可以用来debug
这三个并不经常使用
不能使用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/) 赋给定的值
