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

 

posted on 2019-02-18 16:37  城外三石  阅读(81)  评论(0)    收藏  举报

导航