JavaScript内置对象(22)
JavaScript内置对象
- 全局对象window
- 全局函数
- 公共属性隐藏在哪里
- toString从哪里来(原型链)
全局对象window
全局对象(global,浏览器中也叫做window)
atob() //将base64位编码转换为字符串
btoa() //将字符串转换为base64位编码
例如:global.parseInt
,global.parseFloat
window中有公共的属性也有私有的属性。
公共的属性是要求所有的浏览器都必须有。
私有的属性。私有的属性为浏览器专有,可以为firefox所有,可以为chrome所有也可以为firfox和chrome共有。
私有属性具体展示:
window.setTimeout(function(){alert("3秒种后显示")},3000) //公共对象 三秒种后显示一个弹出框
简单类型和对象的区别
Number()的两种表达方法:
(1)Number('1')
(2)var n= new Number(1)
var n1 =1
与var 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是比较特殊的一种