也正因如此, 各大浏览器关于console对象API的实现也各不相同(当然log这种基本方法都有。。)
1. 低版本的IE甚至没有console对象(当然也就没有了与之对应的调试功能)
2.谷歌和火狐console对象下的方法基本相同,但也是有差异的。例如:
谷歌console下有memory方法火狐没有
连连看! 找不同
这是我大谷歌中打印的console对象:
这是火狐打印的console对象
Window对象
学习JS的筒子们一般都知道, “JS有有个保存全局变量的顶层对象, 它叫Window对象,或者叫做global对象”
我一直以来也有一个困惑:“既然(如果)Window对象和global对象是同一个东西的话,干嘛要取两个名称,你们玩我啊?”
阅读了相关资料后, 我发现:“Window对象和global对象是同一个东西”的说法并不是很精确
最重要的一点是:他两隶属的“政治阵营”不一样
1.Global对象是ECMAscript标准中定死的全局对象
2.Window对象是浏览器的一个实例,所以你容易推测出:不同的浏览器对Window的实现应该是不一样的,至少在许多细节上会有不同, 也就是这些不同的浏览器分别拥有并不太一样的Window对象
而javascript在宿主环境(浏览器)上运行的时候, 会把当前浏览器Window对象作为自己的Global对象,这时候,“从表面上看”, Window对象和Global对象“是同一个”
所以说javascript运行程序就是一个到处混吃混喝的主,找到哪个“东家”(宿主环境/浏览器),就把东西的Window对象“偷”出来, 当成自己的Global对象
以下场景是我想象出来的:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
javascript敲了敲门:“诶,老谷啊(谷歌)! 我又上你家串门来了,那个啥。。。。。”
门开了
谷歌浏X器瞧见是JS, 从怀里掏出Window对象来,摆摆手:“走! 走! 走!!!”
javascript把Window对象放进自己的Global口袋里,心满意足地走了。
“明儿去老狐家和safari家吧! IE家太寒碜,我就不去了”
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DOM元素对象
例如 var a = document.createElement('div'); 取得的就是一个DOM元素对象
DOM元素对象也是浏览器提供的东西, 所以它并不像javascript标准里的其他对象那样服从“控制”
它有以下一些特点:
• 无法写覆盖;
• 包含一些预定义的只读属性;
• 包含无法将 this 重载为其他对象的方法
下面讲的这些东西, 有些你可能比较少用到, 但它们绝对有理由会坑到你,而且还会。。。。坑死你。。。
undefined篇
恼人的undefined
为了进一步明确undefined的行为, 这里我引入 undeclared的概念:
1.undefined表示变量声明了, 但没有赋值, 不会报错
2.undeclared表示变量从来就没有声明, 这会导致报错
var b; console.log(b); // 输出undefined
console.log(a); // 直接报错
到底是什么让我们对undefined一脸懵蔽?
首先我要告诉你上面1,2两条已经足以表征undefined和 undeclared的不同了,但很多时候我们仍会搞混,为什么呢?
因为javascript会 故!意!搞!事!(此处有褒有贬)
1. 一般情况下使用一个未声明(undeclared)的变量是会直接报错的,但typeof运算符的“安全机制”会规避这一点, 例如:
a;