JavaScript内置对象(22)

JavaScript内置对象
  • 全局对象window
  • 全局函数
  • 公共属性隐藏在哪里
  • toString从哪里来(原型链)
全局对象window

全局对象(global,浏览器中也叫做window)
atob() //将base64位编码转换为字符串
btoa() //将字符串转换为base64位编码
例如:global.parseIntglobal.parseFloat


window中有公共的属性也有私有的属性。
公共的属性是要求所有的浏览器都必须有。
私有的属性。私有的属性为浏览器专有,可以为firefox所有,可以为chrome所有也可以为firfox和chrome共有。

私有属性具体展示:

window.setTimeout(function(){alert("3秒种后显示")},3000) //公共对象   三秒种后显示一个弹出框
简单类型和对象的区别

Number()的两种表达方法:
(1)Number('1')
(2)var n= new Number(1)
var n1 =1var n2 = new Number(1)的区别
n2里面的值可以通过valeOf()属性调用
new的出现是JS之初,JS之父为了响应老板的需求是JS更像Java而特地制作出来的
之后var n1=1引入了临时变量,使得var n=1 也可以使用toString(),valueOf(),这个变量使用完成就会被立即消失


思考题:

var n = 1;
n.xxx = 2; 
n.xxx=?

(1)首先定义一个简单变量n-1
(2)然后n.xxx赋予一个临时的哈希数组,使得n.xxx=2,其中可以公用valueOf(),toString()属性.这一句执行完则自动消除
(3)n.xxx还是一个简单的变量,所以n.xxx的结果为undefined
内存图详解:


String()的两种表达方法:
(1)String('1')
(2)var n= new String(1)
其中toString有很多API:
(1)除去前后字符串的空格
' yseser '
' yseser '.trim() //'yseser'
(2)连接字符串
var s1='hello' var s2= 'world'
s1.concat(s2) //'helloworld'
(3)slice()切片
s1.slice(0,2) //he 表示从第一个开始,共计两片
s1.slice(0,3) //hel 表示从第一个开始,共计三片
s1.slice(0,4) //hell 表示从第一个开始,共计四片
(4)replace替换
s1.replace('e','o') //'hollo 将S1字符串的e更换成o'

boolean()表达方法类似
也有toString(),也有valueOf()

Object()表达方法
(1)var o1 = {}
(2)var o2 = new Object()
虽然Object有两种表达方法,但是这两种表达方法不相同。


简单的介绍了一下各种数据类型,而他们的表达方法如内存图所示:

各种数据类型的共同点就是他们都有toString(),valueOf()接口,内存资源也稀缺重要不会允许他们这样浪费,于是这是就要使用共同资源,将所有的toString()``valueOf()存到一个公用资源中,需要使用时只需要给一个地址指向它就可以使用。也就是我们下面要提到的原型链。

通过一个隐藏的属性__proto__指向共同的属性:




不同类型的表达方法区别:

JS内存结构图:

通过上面我可以知道: Object对象是所有对象的共有属性。任意一条类型的线路从开始到最后就叫做原型链

所以:
s1.__proto__ === String.prototype
s1.__proto__ === Object.prototype
n1.__proto__ === Number.prototype
n1.__proto__ === Object.prototype
b1.__proto__ === Boolean.prototype
b1.__proto__ === Object.prototype


而结合着了解在无代码的情况下怎么实现:

浏览器中(window)中的prototype永远存在,否则就会被垃圾回收!!!

最后我们详解一下烧脑的proto与prototype的区别



(1)表示对象的属性 (2)表示函数的属性 (1)(2)都表示同一个类型的属性
而在上述考虑的属性中Function是比较特殊的一种

你可能感兴趣的:(JavaScript内置对象(22))