纯Javascript的简单弱智提问

cy904159293 发布于 2013/07/24 09:04
阅读 283
收藏 1

我是新手,最近碰到几个困惑的问题,如下

1,关于Js数组的,这个申明数组为什么是可以的?

function imgl(x) { //获取数组的记录数
    this.length = x;
}
//声明数组并给数组元素赋值,也就是把图片的路径保存起来
imgs = new imgl(2);
imgs[0] = "14.jpeg";
imgs[1] = "mm1.jpg";

2,一段顺序执行过程中,注释部分如果用的话,就起不了作用

// i = (i == 1) ? 0 : i++;
    if (i == 1) { i = 0;}
    else { i++; }

第二次编辑补充:

var i = 1;
i = (i ==1 ) ? 0 : i++;
alert(i); // 0

i = 0;
i = (i ==1) ? 0 : i++;
alert(i); // 还是0,这就是纳闷之处(ps:外加括号一样的)

多多提点,不胜感激

加载中
0
我是潮汐
我是潮汐

第一个问题, js中 对象又叫关联数组.. 至于为什么你这样可以, 去查查javascript关联数组吧. javascript是可以动态给对象添加属性的. 

第二个问题.第二个问题有点复杂. 首先你要理解前自增运算符和后自增运算符的区别. 写成 if else的形式就会没问题, 我怀疑是运算过程中, i自增后的值丢了. 好好思考一下吧.

c
cy904159293
哈哈,谢谢,想起来了
0
进击的程序员
进击的程序员

1.imgs是一个对象。imgs[0]其实相当于给这个对象加了一个属性,与imgs["name"] = "coco"是一样的。这并不是一个真正的数组,数组应有的操作如push这些是不能使用的。

..第二个没看懂

0
rkily
rkily
2. i =( (i == 1) ? 0: i++);
c
cy904159293
其实这个括号是没有必要的吧,赋值操作优先级好像最后的,我再用你的测试了下, <script> var i = 0; i =((i == 1) ? 0: i++); alert(i); </script> 还是失败的。。
0
云中漫步

1.脑残之极,如果参数带入的是字符串呢。

  还要去判断。还不如直接就用一个对象去处理,要获取对象的长度难道很困难吗。


2.i =( (i == 1) ? 0: i++);

如果i为非1的数.最后结果i=1, 在往下执行  if (i == 1) { i = 0;}
    else { i++; } 最后结果为0。

如果i为1,最后结果i=0. 在往下执行结果为1.

也就是说是用来判断结果是1还是非1的,不知道上下文,不好评价,有点脑残。

如果i未初始化或者没有定义,或者是字符串这个就有问题了。



0
c
cy904159293

引用来自“柔软胖子”的答案

1.imgs是一个对象。imgs[0]其实相当于给这个对象加了一个属性,与imgs["name"] = "coco"是一样的。这并不是一个真正的数组,数组应有的操作如push这些是不能使用的。

..第二个没看懂

第一点理解了
<script>
function myArray(length) {
    this.length = length;
}
var arr = new myArray(2);
arr["first"] = "First";
arr["second"] = "Second";
arr[0] = "0";
alert(arr[0]);
</script>
不会有length限制了,push什么就没试了

第二点是这样的,就是为了实现
if (i == 1) {i = 0} //是1变回0
else {i++} //这样 i 就会无限 0 和 1 之间变值了,
但是 i = (i == 1) ? 0 : i++;应该是可以实现是上边的,但是没有效果的。。
0
c
cy904159293

引用来自“云中漫步”的答案

1.脑残之极,如果参数带入的是字符串呢。

  还要去判断。还不如自己就用一个对象去处理,要获取对象的长度难道很困难吗。


2.i =( (i == 1) ? 0: i++);

如果i为非1的数.最后结果i=1, 在往下执行  if (i == 1) { i = 0;}
    else { i++; } 最后结果为0。

如果i为1,最后结果i=0. 在往下执行结果为1.

也就是说是用来判断结果是1还是非1的,不知道上下文,不好评价,有点脑残。

如果i未初始化或者没有定义,或者是字符串这个就有问题了。



1,呵呵,我是看到有人这样注释的,那我就纳闷了,Array还有这样用的,那这个对象的长度获取咋实现呐,新手新手 - -

2,流程什么的我晓得了,我纳闷如下:

var i = 1;
i = (i ==1 ) ? 0 : i++;
alert(i); // 0

i = 0;
i = (i ==1) ? 0 : i++;
alert(i); // 还是0,这就是纳闷之处(ps:外加括号一样的)


c
cy904159293
回复 @囚兔 : 恩恩,被你这么一说想起来了,表达式运算结果赋值问题
囚兔
囚兔
问题简化下,var i = 0; i = i++; 后面一句执行的顺序是,先计算表达式i++的结果为0,暂存起来, 然后i自增后i为1,最后做赋值运算将之前暂存的0值赋值给i, i最后的值为0
0
Shazi199
Shazi199

imgs=[]就够了,简洁又方便

 

i =i++这一句在js中等同于i=i,因为最后赋值给i的结果是在自增之前的结果,覆盖了自增后的值

c
cy904159293
恩,后来想起来了,在js中赋值i = i++;这是在右边表达式运算结果赋值给左边的,哈哈,太初级了,3q了
进击的程序员
进击的程序员
正解。。。
0
我是潮汐
我是潮汐

刚又做了个实现 发现 如果i在定义时 加上var  效果跟预期的是一样的...

c
cy904159293
什么实现呐?能贴出来吗?
返回顶部
顶部