注册 登录
编程论坛 JavaScript论坛

数组长度

jsRank 发布于 2015-05-26 09:15, 1546 次点击
var name = [1,2];
alert(name.length);结果是5,这是闹哪样
13 回复
#2
林月儿2015-05-26 10:26
var na = [1,2];
alert(na.length);
#3
jsRank2015-05-26 10:59
回复 2楼 林月儿
name这个关键字是干嘛的
#4
林月儿2015-05-26 11:14
标签的标识符,和id类似但下面这个现象又说明两者关系不大
 有人在使用Request.Params[nameOfId]在表单提交获取控件id为nameOfId的值失败了,后改为name=nameOfId就好了。
但如果说是.net后台Session传值调用Id应该是没问题的
总之作为关键字不管是java,C,C++,javascript变量名最好避开不然都不知道会发生什么。。。。
附:JavaScript方面刚了解。。。以上言论不足之处请见谅
#5
冰镇柠檬汁儿2015-05-26 11:57
var name = '[1,2]';
alert(name.length); // 5

楼主你的这个结果怎么可能
#6
林月儿2015-05-26 12:13
回复 5楼 冰镇柠檬汁儿
var name = [1,2];
     document.write(typeof(name)+'<br/>name.length='+name.length+'<br/>');
        for(var key in name){
         document.write(name[key] + '<br/><br/>');
    }
显示结果:
string
name.length=3
1

,

2
   var na = [1,2];
     document.write(typeof(na)+'<br/>na.length='+na.length+'<br/>');
        for(var key in na){
         document.write(na[key] + '<br/><br/>');
    }
显示结果:
object
na.length=2
1

2
#7
jsRank2015-05-26 14:37
回复 6楼 林月儿
name=[1,2]的length,在不同的浏览器下是不一样的,IE显示的是正确的2,火狐和chrome显示的是3。
name和id是不类似的,id不是js的关键字,id=[1,2]的length在ie,firefox和chrome下的值都是2。
name这个关键字在js中到底是干什么用的?
#8
hu9jj2015-05-27 06:33
4楼说得对,变量名尽量避开关键词。
#9
冰镇柠檬汁儿2015-05-27 10:05
TO:jsRank

var name = [1,2];
alert(name.length);
这段代码你在什么地方写的,如果是全局作用域,那肯定有问题
似乎你忘记了window.name这个属性,是代表的当前页面的名称,作用是判断当前的Window,如一个页面里面有很多iframe,就可以用
window.name:当前window的名称
window.parent.name:父window的名称
widnow.top.name:顶层window的名称

如果写在局部作用域中就不会有你说的问题了
#10
jsRank2015-05-27 13:34
回复 9楼 冰镇柠檬汁儿
name是window的属性,那alert也是window的属性,如果执行var alert = [1,2];alert.length的值却是正确的。
不管你是不是window的属性,当我将其覆盖后,再求其值,应该是覆盖后的值,比如var alert = [1,2];alert.length的值是2。window的alert方法已经不存在了。
而,当我对window的name赋值时,不管你赋什么值,它都会先执行toString方法,将你的赋值转为字符串类型再赋给name。但IE确没有做这样的类型转换,window的name属性确确实实被覆盖了。
#11
冰镇柠檬汁儿2015-05-27 16:15
window.name没有被覆盖,而只是赋值,因为这个变量已经存在,那么var就变的没有意义了(这是javascript的原则,已经存在的变量,再次var,就将忽略var),所以你无法确定谷歌和火狐是怎么处理这个变量的
不信你可以试试下面的代码
var name = [1,2,3];
alert(name.toString());
alert(name.length);
这个结果说明火狐和谷歌浏览器 更像是 把window.name这个变量定义成string类型的,不论赋值成什么,这个变量都将被当成字符串处理
而ie浏览器则只是把它当成普通javascript变量来用
#12
jsRank2015-05-27 16:58
回复 11楼 冰镇柠檬汁儿
我说的覆盖就是window.name的值被覆盖啊。js是做不到将一个变量声明为string类型,因为js本身就是弱类型语言,给一个变量什么值,这个变量就是什么类型,变量的类型是根据它的值来决定。
好比window.alert是function类型,但alert=[1,2,3]之后,alert就变成了数组类型。
再来说window.name,即使它原来是字符串类型,给它一个数组,它是不是也应该抛弃它原来的字符串类型而变成数组类型呢,
可能是给window.name赋值时,浏览器内部会将值转为字符串赋给name,也可能是读取window.name时,浏览器内部将window.name转为字符串类型返回。
至于是怎么转成字符串类型的,不知道,但为什么唯独对name这么处理,对alert为什么不转成function类型而是乖巧的变成数组。。。。。。
#13
冰镇柠檬汁儿2015-05-27 17:31
这个我也不清楚,估计是webkit内核的特殊处理,毕竟window.name是名称,而不是普通变量,我觉得没必要这么纠结这个吧
#14
jsRank2015-05-27 23:28
回复 13楼 冰镇柠檬汁儿
就这样了!
奇怪,散分结贴,分没散到你身上啊,悲剧了。。。

[ 本帖最后由 jsRank 于 2015-5-27 23:30 编辑 ]
1