JS里的对象(标准库) 普通类型和对象的区别
- 详细教程参考阮一峰的js教学:标准库
JS语言内置了一些对象,我们需要知道这些对象。全局的概念就是在全文每个地方都能使用。
全局对象 window
我们知道JS的出现就是为了能够控制浏览器行为,故浏览器先于ECMAscript存在。ECMAScript规定全局对象叫做global,但是浏览器把window作为全局对象。
window是一个hash表,有很多属性。window 的属性就是全局变量。windows的属性分为两种,一种公有,一种私有。公有就是ECMAscript规定的,私有就是某些浏览器自己加的windows属性,且各浏览器表现出来的形式不一样。
全局对象window
不管在哪个网页,都能访问一个对象,window
标准里叫glabol
全局函数,就是在任何地方都能用的函数
如果是window
的属性或者方法,可以不加window
.
左边为node
和window
都有的属性或对象,右边是只有window有的
ECMAScript规定的:
- global.parseInt
- global.parseFloat
- global.Number
- global.String
- global.Boolean
- global.Object
各浏览器自己加的属性:
- window.alert(弹框提示)
- window.prompt(用户填写)
- window.comfirm(用户确认)
- window.console.log(开发者)
- window.console.dir
- window.document(文档,其标准DOM由W3C组织制定)
- window.document.createElement
- window.document.getElementById
- window.history(浏览器,其标准为BOM)
- window.history.back
Number()
var n1 = Number('1') 和 var n2 = 1; 与 var n3 = new Number(1)三者的区别:前二者声明数字number类型,后者为对象object类型
image.png image.png有一个重要的问题需要弄清楚,我们知道,简单类型(number/string/boolean)是没有属性的,但是上面为什么n2.toString又是成立的呢,其实是n2.toString返回的是一个临时对象temp的temp.toString()值,这是JS设计者想的一个办法,既能语法像JAVA满足boss的要求,又能方便程序员的使用。下面我们来看看var n2 = 1; n2.toString(); 这两句代码在内存中发生了什么:
内存图
image.png
还有一个易错的问题:
因为当直接var一个数值的时候,在用那些对象里的方法,后台就会设置一个临时对象,用完后再删除
这里面的第二步执行完步之后,n.xxx的结果是2,但是这个temp和Heap(画圈的)里面的没有引用关系,会被回收。
image.png
因此在执行第三步的时候,Heap会重新生成一个新的temp引用,但是这个引用里面没有上面第二步的n.xxx,
所以第三步中的n.xxx会查找不到值,最后的结果就是Undefined。
String()
var s1 = String(1) 和 var s2 = 'this is a string.'; 与 var n3 = new Number('this is a string.')三者的区别:前二者声明数字string类型,后者为对象object类型。代码在内存的原理同number。看下图:
image.pngBoolean()
var b1 = Boolean(4) 和 var b2 = false; 与 var b3 = new Boolean(false);三者的区别:前二者声明数字boolean类型,后者为对象object类型。第一为强制类型转换为boolean,第二是程序员方便使用,第三是给老板看,把 false包装成 对象。代码在内存的原理同number,string,不再画图复述
注意:
image.png这里面都是false,但是怎么就打印2 ???
解析:
这是因为在上面JS的类型中,说过,boolean布尔值为false的只有五种,分别是0,NaN,'',null,undefined
。其他的包括对象都是true,而上面的var f2 =new Boolean(false)是一个对象。所以在下面执行中就会打印出2。
Object
var o1 = Object(2) 和 var o2 = {}; 与 var o3 = new Object();三者的区别:第一是强制类型转换成对象类型,第二程序员常用声明一个对象类型,第三应付boss,仿JAVA。但是注意o2!==o3,两个不同的对象
image.png image.png小结:
看到这里,我们可以知道四个全局函数(Number、String、Boolean、Object)的作用和相应内存的改变了
这些全局函数只是将值由基本类型变成了对象而已