当前位置: 代码迷 >> JavaScript >> 初入国内500强,有几个js的编程规范不理解,好吧,只要你进来小弟我就告诉你公司名字。
  详细解决方案

初入国内500强,有几个js的编程规范不理解,好吧,只要你进来小弟我就告诉你公司名字。

热度:365   发布时间:2013-11-29 00:21:24.0
初入国内500强,有几个js的编程规范不理解,好吧,只要你进来我就告诉你公司名字。。。
标题有点大了,不过问题还是蛮有意思的
来公司一段时间了,看了不是java和js的编程规范,有几点不理解,求指导。
1、禁止使用for-in语句枚举数组。(这个好像说的是不安全还是怎么回事)。
2、禁止使用with语句。(貌似我没这样用过)。
3、业务代码禁止使用eval。
禁止使用Function 构造器,它是另外一种形式的eval。
禁止给setTimeout 或者setInterval 传递字符串类型参数,否则这两个方法的行为就类似于eval。
(这只知道eval可能把字符串当作代码运行,后面说的完全不知道什么意思)
4、禁止使用new Object(),必须用{}替代。
5、禁止使用new Array(),必须用[]替代。
好吧,先说这些了。至于公司名,他出的手机人称剁手兴,不敢多说了。。。

------解决方案--------------------
除了不让用new那个比较怪,其他都是很正常的吧。eval换哪家都不给用的
------解决方案--------------------
http://book.douban.com/subject/3590768/
你去看看这书你明白了。

eval,with这些东西容易出错,所以不用。 就是这样。
------解决方案--------------------
1,for..in不知道说的什么。不过有些浏览器会给对象增加一些额外的属性,for..in会一起遍历出来导致你的程序出错什么的

2,with效率不行

3,eval动态执行代码有安全隐患,主要是XSS攻击

function hello(){alert('hello')}
setTimeout("hello()",5000);

应该这个意思,应该写成setTimeout(hello,5000);  

至于传递字符串,底层js实现原理不太清楚,应该不是每个浏览器都按照eval来动态执行吧。。这么多个浏览器核心


4,5应该是基于代码压缩,{}和[]代码量少点。。
------解决方案--------------------
禁止给setTimeout 或者setInterval 传递字符串类型参数,否则这两个方法的行为就类似于eval

这个用于刷新页面,或设置页面超时.

新入公司你就先跟着公司规则走,以后有什么再说

------解决方案--------------------
禁止使用Function 构造器
就是说不能是用闭包了,同样也不能使用任何一款框架工具了
那么 ajax 是否可以用呢?取到的数据也可能是有害的哟
------解决方案--------------------
for  in会遍历出本身所有的属性  而其中大多数并不是你想要的  你可能只想要数组的值而已 所以会导致效率低
width 会改变作用域链的层级关系  导致效率降低
eval赋字符串存在安全问题
new Function存在效率问题
------解决方案--------------------
for in  如果数组有其他属性。就会有问题。for in会遍历数组的所有属性。

with 从没用过,很多书上都说尽量不用。没研究原因

new Object new Arrary 
应该等同于 {} [];

直接 {} [],简单,字符数少,js 文件会稍小
------解决方案--------------------
for in倒是一直用的,用的时候还没出现问题,LS的大大们应该说的没错,看来以后使用要注意了,呵呵
with从没用过,不清楚。
eval,可以认为是危险品。不能随意使用,能不用尽量不要使用
至于new,这个就不清楚了。
------解决方案--------------------
1.for-in循环数组没有直接访问下标来的快。
2.with语句会改变当前上下文,也就是this指向会改变
3.eval会破坏作用域。
4,5.字面量需要较少的空间
------解决方案--------------------
不让用,那么不让用总得有对应的办法吧? 不让用eval,不让用new Function,那么用什么方法呢?
------解决方案--------------------
除了 不能 new function 感觉比较奇怪
其它的  都还好吧。
------解决方案--------------------
引用:
http://book.douban.com/subject/3590768/
你去看看这书你明白了。

eval,with这些东西容易出错,所以不用。 就是这样。


嗯,最近我也看这本书了,在“鸡肋”与“糟粕”部分对javascript语法缺点吐槽的很给力。
LZ我有这书的电子版,LZ要的话留邮箱吧。
------解决方案--------------------
还是考虑效率和安全性
------解决方案--------------------
说的很对
照做就是
------解决方案--------------------
要是像循环访问一个对象里面的属性不用forin咋访问?
------解决方案--------------------
for-in 的效率比其他几个形式低。

eval 效率极低,能不用就不用。

4和5 也都是效率问题。
------解决方案--------------------
引用:
for in  如果数组有其他属性。就会有问题。for in会遍历数组的所有属性。

with 从没用过,很多书上都说尽量不用。没研究原因

new Object new Arrary 
应该等同于 {} [];

直接 {} [],简单,字符数少,js 文件会稍小

不仅仅如此
new Object 的效率低于{}
new Array 的效率低于[]
------解决方案--------------------
引用:
Quote: 引用:

要是像循环访问一个对象里面的属性不用forin咋访问?

通常是这样 
for(var i = 0; i < obj.length; i++){
    obj[i].属性;
}



var obj = {name:"jack",age:100};
for(var item in obj){
   console.log(obj[item]);
}

那这种用for怎么处理呢? 如果不知道obj的属性名的情况下
------解决方案--------------------
new Function时作用域是全局的,this对象也是全局的,
每个次执行都要重复创建,
因些,作用域破坏了代码的可读性,效率低下
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

要是像循环访问一个对象里面的属性不用forin咋访问?

通常是这样 
for(var i = 0; i < obj.length; i++){
    obj[i].属性;
}



var obj = {name:"jack",age:100};
for(var item in obj){
   console.log(obj[item]);
}

那这种用for怎么处理呢? 如果不知道obj的属性名的情况下

1、禁止使用for-in语句枚举数组
  相关解决方案