Number
var n1 = 1
用这种
var n2 = new Number(1)
很少用
n1
本来没有tosting
方法,但是js之父把它设计成了 临时转换
temp = new Number(n) temp.toString()
然后把temp
干掉 这样 n1.toString()
就是1了
var n1 = 1
n1.xxx = 2
n1.xxx // undefined 是临时对象 用完了就没了
String
var s='dsafewfjiw'
var s2 = new String(s)
console.log(s2)
这样s2就是类似数组的样子,有length
s2.charAt(0) // d 获取某个索引的字符
s2.charCodeAt(0) 获取某个索引的字符的编码
'a'.charCodeAt(0) //97
'a'.charCodeAt(0).toString(16)//61(16进制 )
string的常用方法
' username '.trim() //"username"
var s1 = 'hello'
var s2 = 'world'
s1.concat(s2) //"helloworld" 原来的不变
s1.slice(0,2) //"he" 包前不包后
Boolean
var f = false
var f2 = new Boolean(false)
if(f){console.log(11)} //undefined
if(f2){console.log(22)} //输出 22
上一篇文章讲了只有5个false 而对象不是false
Object
Number String Boolean Object这四种全局函数,前三种是把基本类型变成对象
共有属性
a1.toString === a2.toString //true
var n = new Number(11)
Number特殊 它先引用number的共有属性( toFixed,toExponential,toString等方法 ),然后再去引用共有属性。
原型就是共有属性的意思。
String.prototype
是 String 的共用属性的引用 //指向共用属性,不指就跑了被回收了
s.__proto__
是String 的共用属性的引用 //我要用这个共用属性
即s.__proto__ ===String.prototype
烧脑环节
原型可以总结为下面的等式
var 对象 = new 函数 ()
对象.__protp__ === 函数.prototype
__proto__
是对象的属性 prototype
是函数的属性 它们都指向共用属性
因为原型的表达可以用上面的等式表达,那么:
var obj = 函数.prototype
运用于等式中:obj(函数.prototype) .__proto__ === Object.prototype
=>函数.prototype .__proto__ === Object.prototype
问题来了:函数是不是对象
其实函数是对象:
先看例子
var obj2 = 函数 //函数是不是对象,函数是对象(要么基本类型,要么是对象,函数不是基本类型,所以是对象)
运用总结的等式来写:
函数.__proto__ === Function.prototype //函数是由function构造出来的
Function.__proto__ === Function.prototype // true
Function.prototype.__proto__ === Object.prototype //true