事件起因:

  一次开发中需要获取一个数组的长度,写下如此代码

 function func(arr){
length = arr.length;
......//相关操作
}

程序在chrome下正常运行,但到IE8下出现了问题。检查代码,发现由于粗心,在函数体内部声明变量时 掉了一个var。

但我们知道,js是一种弱类型语言,即使是直接赋值给未声明变量也是可以的,而且chrome下是可以正常运行的,说明这样写也是没错的。

拿到IE开发人员工具的console里跑一下,终于知道了一二。

在IE6,7,8下输入

length  = 1;

显示:对象不支持此操作

为什么会报这样的警告呢?

我们知道直接这样声明的变量是全局变量,浏览器的全局对象是window,这里即是window.length = 1;

window.length是什么呢?

其实就是window.frames.length,即frame的数量,对它进行赋值改变,显然很容易触发一些问题。

不光是length,window对象的其他属性也不能随意赋值,例如:

frames = 1;

显示:尚未实现的警告

其他浏览器为什么可以呢?


打开chrome的console,输入

length = 3;
console.log(window.frames.length);

输出:3,IE9+也是如此。

不仅如此,在IE8下,输入

var length = 3;
console.log(window.frames.length);

也是输出3。

显然浏览器是允许开发者显示的去改变内置对象window的一些属性的

后续思考:

浏览器开发商允许开发者可以显示地改变这些属性,是否会造成一些安全性问题,身为菜鸟的我不得而知,但有时确实会造成一些不必要的麻烦,比如像愚安我这次遇到的这种小问题。

所以在此提醒一下一些像我这样的js菜鸟注意下,在使用全局变量时,尽量避开window的一些属性名称,以免出现很郁闷的问题,希望能或多或少给大家一点启发。

关于window对象有哪些属性,在此愚安我就不一一列举了,想知道童鞋们可以移步另一篇园子里的博客:js-window对象的方法和属性资料

好了,这是愚安我入驻园子的第一篇,希望大家多多指教,多多照顾。

  

window对象的属性方法名造成的命名冲突的更多相关文章

  1. JavaScript (JS)基础:BOM 浅析 (含window对象相关基本方法、属性解析)

    ① window对象(Math方法也属于window对象): window对象是JavaScript中的顶级对象,所有定义在全局作用域中的变量.函数都会变成window对象的属性和方法,window对 ...

  2. JavaScript中的window对象的属性和方法;JavaScript中如何选取文档元素

    一.window对象的属性和方法 ①setTimeout()方法用来实现一个函数在指定毫秒之后运行,该方法返回一个值,这个值可以传递给clearTimeout()用于取消这个函数的执行. ②setIn ...

  3. 全局变量都是window对象的属性

    var x = "haha"; var test  = function(){ alert(this.x); } 上述,则会弹出 haha的值. 因为在JavaScript的变量作 ...

  4. window对象的属性及事件。

    不同的运行环境有不同的“顶层对象”,而在浏览器的环境中,顶层对象就是window对象.window就是指当前的浏览器窗口. 例:var a = 1: window.a; //1 1.window对象的 ...

  5. JavaScript DOM编程基础精华02(window对象的属性,事件中的this,动态创建DOM,innerText和innerHTML)

    window对象的属性1 window.location对象: window.location.href=‘’;//重新导航到新页面,可以取值,也可以赋值. window.location.reloa ...

  6. js window对象属相和方法相关整理资料

    window对象有以下方法: open close alert confirm prompt setTimeout clearTimeout setInterval clearInterval mov ...

  7. 275 原型与原型链:显式原型prototype ,隐式原型__proto__,隐式原型链,原型链_属性问题,给原型对象添加属性/方法

    1.所有函数都有一个特别的属性 prototype : 显式原型属性 [普通构造函数的实例对象没有prototype 属性,构造函数有__proto__属性,原型对象有__proto__属性 ] 2. ...

  8. js中__proto__, property, prototype, 对象自身属性方法和原型中的属性方法的区别

    __proto__: 这个属性是实例对象的属性,每个实例对象都有一个__proto__属性,这个属性指向实例化该实例的构造函数的原型对象(prototype). proterty:这个方法是对象的属性 ...

  9. 1.4(JavaScript学习笔记) window对象的属性及方法

    一.window对象 window对象代表当前窗口,所有全局对象都是windows的属性, 例如document是window的属性,window.document.writer("&quo ...

随机推荐

  1. 浅谈 css3 box盒子模型以及box-flex的使用

    display:box;box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构.css实现的布局方式.经典的一个布局应用就是布局的垂直等高.水平均分.按比例划分.   一.使 ...

  2. 在IIS上发布项目后浏览时报的错:Unable to make the session state request to the session state server

    错误描述: Unable to make the session state request to the session state server. Please ensure that the A ...

  3. android四种更新UI的方法

    笔记: // 使用handler.post(Runnable)更新UI public void updateUI_Fun1() { new Thread() { public void run() { ...

  4. java web服务器文件的下载(有下载弹出匡)

    昨天做了一个文件从服务下载的功能,怎么都不弹出页面,下载框.后查询得知.目前两种方法 1.<a href='下载路径' /> 2.window.location.href = basePa ...

  5. 基于jquery的inputlimiter 实现字数限制功能

    html代码: <td>内容摘要:</td> <td> <textarea id="content_summary" rows=5 nam ...

  6. ebay的api的开发技术笔记

    使用eBay API基本步骤介绍 要开始使用eBay API,需要如下基本步骤: 1.    注册开发帐号: https://developer.ebay.com/join/Default.aspx ...

  7. AOJ 2200 Mr. Rito Post Office

    Mr. Rito Post Office Time Limit : 8 sec, Memory Limit : 65536 KB Problem D: Mr. Rito Post Office あなた ...

  8. ZigBee安全相关

    ZigBee安全由AES加密算法和CCM操作方式作为安全方案,广泛使用在ZigBee联盟的通信协议中.ZDO层负责安全策略和安全配置的管理. Technorati 标签: ZigBee 安全 2. 配 ...

  9. AngularJS中的MVC模式

    MVC根据逻辑关系,把前端项目的代码分为三个层次 model:模型,就是业务数据,前端项目中就是JS变量. view:视图,就是业务数据在用户面前的展现,前端项目中就是HTML. controller ...

  10. git 终端常输入命令

    cd 输入命令 ls 返回目录 git add . 相当于保存代码 git commit -m "" 相当于提交 get pull把服务器上代码拉回本地代码. get pust 刷 ...