window对象的属性方法名造成的命名冲突
事件起因:
一次开发中需要获取一个数组的长度,写下如此代码
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对象的属性方法名造成的命名冲突的更多相关文章
- JavaScript (JS)基础:BOM 浅析 (含window对象相关基本方法、属性解析)
① window对象(Math方法也属于window对象): window对象是JavaScript中的顶级对象,所有定义在全局作用域中的变量.函数都会变成window对象的属性和方法,window对 ...
- JavaScript中的window对象的属性和方法;JavaScript中如何选取文档元素
一.window对象的属性和方法 ①setTimeout()方法用来实现一个函数在指定毫秒之后运行,该方法返回一个值,这个值可以传递给clearTimeout()用于取消这个函数的执行. ②setIn ...
- 全局变量都是window对象的属性
var x = "haha"; var test = function(){ alert(this.x); } 上述,则会弹出 haha的值. 因为在JavaScript的变量作 ...
- window对象的属性及事件。
不同的运行环境有不同的“顶层对象”,而在浏览器的环境中,顶层对象就是window对象.window就是指当前的浏览器窗口. 例:var a = 1: window.a; //1 1.window对象的 ...
- JavaScript DOM编程基础精华02(window对象的属性,事件中的this,动态创建DOM,innerText和innerHTML)
window对象的属性1 window.location对象: window.location.href=‘’;//重新导航到新页面,可以取值,也可以赋值. window.location.reloa ...
- js window对象属相和方法相关整理资料
window对象有以下方法: open close alert confirm prompt setTimeout clearTimeout setInterval clearInterval mov ...
- 275 原型与原型链:显式原型prototype ,隐式原型__proto__,隐式原型链,原型链_属性问题,给原型对象添加属性/方法
1.所有函数都有一个特别的属性 prototype : 显式原型属性 [普通构造函数的实例对象没有prototype 属性,构造函数有__proto__属性,原型对象有__proto__属性 ] 2. ...
- js中__proto__, property, prototype, 对象自身属性方法和原型中的属性方法的区别
__proto__: 这个属性是实例对象的属性,每个实例对象都有一个__proto__属性,这个属性指向实例化该实例的构造函数的原型对象(prototype). proterty:这个方法是对象的属性 ...
- 1.4(JavaScript学习笔记) window对象的属性及方法
一.window对象 window对象代表当前窗口,所有全局对象都是windows的属性, 例如document是window的属性,window.document.writer("&quo ...
随机推荐
- 基于ASP.Net +easyUI框架上传图片,实现图片上传,提交表单
<body> <link href="../../Easyui/themes/easyui.css" rel="stylesheet" typ ...
- PHP面向对象之将数据库的查询结果序列化成json格式
<?php class link_mysql{ private $host,$uid,$pwd,$db,$link,$res; function link_mysql($_host,$_uid, ...
- LAMP+Proftpd+数据迁移
on Centos 6.5 64bit minimal 安装mysql [root@ftp ~]# yum install -y mysql mysql-server mysql-devel --安 ...
- WebService 的创建,部署和使用
WebService,即Web服务,能使得运行在不同机器上的不同应用无须借助,专门的第三方软件或硬件,就可相互交换数据或集成. 第一次选择WebService,是为了替代数据库远程连接.我们都知道当S ...
- xcode5下cocos2dx横竖屏设置
我们在开发一款游戏之前一定会考虑的一件事就是,我们的游戏是支持横屏还是竖屏,又或者是横竖屏都支持.那么如何在xcode中对项目进行设置呢?下面我就在xcode5.1.1中利用cocos2dx2.2.3 ...
- C#.NET实现Word或Excel文件转为HTML文件
Word文件转html,返回相对路径 private string GetPathByDocToHTML(string strFile) { if (string.IsNullOrEmpty(strF ...
- Revit二次开发-根据Element获取系统族信息
Element element = doc.getElement(elementId); Autodesk.Revit.DB.Parameter familyType = element.get_Pa ...
- (转)IIS7 优化-网站请发并发数
1. 调整IIS 7应用程序池队列长度 由原来的默认1000改为65535. IIS Manager > ApplicationPools > Advanced Settings Queu ...
- 10款让你心动的 HTML5 & CSS3 效果
这里集合的这组 HTML5 & CSS3 效果,有的是网站开发中常用的.实用的功能,有的是先进的 Web 技术的应用演示.不管哪一种,这些案例中的技术都值得我们去探究和学习. 1.超炫的 HT ...
- get the runing time of C++ console program.
// 获取程序运行时间.cpp : 定义控制台应用程序的入口点.// #include "stdafx.h"#include <time.h>#include < ...