JS中的对象
全局对象 window(glabol)
window属性有两种:
- ECMAScript规定 parseInt,parseFloat,setTimeout
- 私有(Firefox,chrome)alert (弹窗) prompt (填入)confirm(确认)console(打印)
- 其次还有一些由其他组织对象规定的规范比如 document(文档)DOM规范由w3c规定
简单对象与复杂对象的区别
Number()
var n1=1 // 包装对象 var n2 = new Number()
这是两个概念的声明,一个是纯粹的number数据一个却是包装了的对象数据
内存中:
n1 1
n2 ADDR44 {.....}
而在 n1.toString中,会变成这样 var temp = new Number(n1) 所以n1现在被赋予到temp这个临时变量上所以可以使用toString这个方法
temp = new Number(n) temp.toString() n = temp
所以才会有一个面试题是这样:
var n=1 n.xxx = 2 console.log(n.xxx) // undefined
因为临时变量使用后会被消除
重要的API
' username '.trim() // 消除多于空格 ' s1.coucat(s2) ' //链接s1到s2的内容 这些重要的API必须熟练使用,所以要到MDN上去查阅相关的操作API
let f = false let f2 = new Boolean(false) if(f)console.log(1) if(f2)console.log(2) // 2
这也是一道非常有趣的基础面试题,虽然对象和对像没有区别,但不代表相等
- 基本的规则要记住
- 七种数据类型
- 五种false
- 内存图
公用属性(原型)
a.__proto__.__proto__
这就是原型链,基于一个一个的原型
当我们声明一个复杂类型时
var o1 = new Object()
它在内存中的存在是 01 ADDR 501 这样存在的
所产生的对应就是哈希表
name = frank
age = 18
.....
__proto__ :A1000
而__proto__则是指向下一的原型
A1000 公用属性
toString:All
Valueof:All
当我使用 01.toString() 时就会检测
- ol不是对像就会包装成对象
- 在ol中查找有没有对象toString如果没有则进入下一个原型,对于的查找接口就是__proto__
- 在下一个公用属性中去找
所以
01 ------------------------- proto
02 ------------------------- toString
03 -------------------------- valueOf
.... 同一个地址
原型就是一个树状的数据结构搭建的原型树

var s =1 ====> temp = new Number(s) ==========> _proto_ ============> _proto_
其中Number.prototype是String共用属性的引用
// 预定义
s._proto_ 是String共用引用属性的引用
虽然它们都是一样的引用但是prototype是无法修改的,是一个规定好了的路径,而_proto_是可以改变的。
我们需要记住
对象.__proto__ === 函数.prototype
而它们之间的区别也就是一个是对象一个是函数,所以
Function._proto_ == Function.prototype
且任何对象的_proto_都指向函数的prototype
浙公网安备 33010602011771号