现在的位置: 首页 > 综合 > 正文

js零碎笔记

2017年11月20日 ⁄ 综合 ⁄ 共 854字 ⁄ 字号 评论关闭

java里懂的就不记了

js的 for/in语句,有点类似java的foreach循环语法, for (variable in object) statement  。这个variable in object,可以是数组中的一个元素,也可以是对象的一个属性。对象的一个属性是java的for循环没有的功能。

还有一个牛逼哄哄的地方,这个variable不必是一个定值,它可以是表达式。

这里顺带插点东西。js中访问对象属性可以使用 object.fieldname,也可以使用object["fieldname"]。后者就是所谓的关联数组。但是后面那种功能强大很多,因为这个"fieldname"可以是一个表达式。这样的话,“fieldname”可以是动态值,也就是在程序运行时才知道是啥值。代码简化不知道多少。如果,这个fieldname属性不存在,则返回的值是undefined,js并不会将之看成错误。

回到刚刚的for循环。看这段代码:

var o = {x:1,y:2,z:3};

var a = new Array();

var i = 0;

for (a[i++] in o);

它的效果是把对象o  的属性全部赋值到了数组a中。显而易见的,赋值过程是在for()里执行的。这其中有个疑惑,o的属性访问顺序是怎么样的?事实上for/in循环并没有指定对象的属性赋给循环变量的顺序,所以在不同的js版本或者实现中这一语句的行为可能有所不同。如果在for/in循环的主体(翻译的水平哥不想说了,明显是循环{}里的语句嘛,英文原版书的这个主体肯定是body这个词)删除了一个还没有枚举出的属性,那么该属性就不再枚举。如果循环主体定义了新属性,那么循环是否枚举该属性则有js的实现决定。意味着与具体浏览器有关。

标签语句,比如给一个循环语句取个名字:

parser:

     while(token != null){}

然后在某处,应该说是在这个循环的{}里的{}里某处,咱可以 break parser;这样可以在多重循环里直接跳出外层循环,也可以continue parser 哦。

抱歉!评论已关闭.