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

解决方案 »

  1.   

    除了不让用new那个比较怪,其他都是很正常的吧。eval换哪家都不给用的
      

  2.   

    http://book.douban.com/subject/3590768/
    你去看看这书你明白了。eval,with这些东西容易出错,所以不用。 就是这样。
      

  3.   

    1,for..in不知道说的什么。不过有些浏览器会给对象增加一些额外的属性,for..in会一起遍历出来导致你的程序出错什么的2,with效率不行3,eval动态执行代码有安全隐患,主要是XSS攻击function hello(){alert('hello')}
    setTimeout("hello()",5000);应该这个意思,应该写成setTimeout(hello,5000);  至于传递字符串,底层js实现原理不太清楚,应该不是每个浏览器都按照eval来动态执行吧。。这么多个浏览器核心
    4,5应该是基于代码压缩,{}和[]代码量少点。。
      

  4.   

    禁止给setTimeout 或者setInterval 传递字符串类型参数,否则这两个方法的行为就类似于eval这个用于刷新页面,或设置页面超时.新入公司你就先跟着公司规则走,以后有什么再说
      

  5.   

    禁止使用Function 构造器
    就是说不能是用闭包了,同样也不能使用任何一款框架工具了
    那么 ajax 是否可以用呢?取到的数据也可能是有害的哟
      

  6.   

    for  in会遍历出本身所有的属性  而其中大多数并不是你想要的  你可能只想要数组的值而已 所以会导致效率低
    width 会改变作用域链的层级关系  导致效率降低
    eval赋字符串存在安全问题
    new Function存在效率问题
      

  7.   

    for in  如果数组有其他属性。就会有问题。for in会遍历数组的所有属性。with 从没用过,很多书上都说尽量不用。没研究原因new Object new Arrary 
    应该等同于 {} [];直接 {} [],简单,字符数少,js 文件会稍小
      

  8.   

    for in倒是一直用的,用的时候还没出现问题,LS的大大们应该说的没错,看来以后使用要注意了,呵呵
    with从没用过,不清楚。
    eval,可以认为是危险品。不能随意使用,能不用尽量不要使用
    至于new,这个就不清楚了。
      

  9.   

    1.for-in循环数组没有直接访问下标来的快。
    2.with语句会改变当前上下文,也就是this指向会改变
    3.eval会破坏作用域。
    4,5.字面量需要较少的空间
      

  10.   

    不让用,那么不让用总得有对应的办法吧? 不让用eval,不让用new Function,那么用什么方法呢?
      

  11.   

    除了 不能 new function 感觉比较奇怪
    其它的  都还好吧。
      

  12.   


    嗯,最近我也看这本书了,在“鸡肋”与“糟粕”部分对javascript语法缺点吐槽的很给力。
    LZ我有这书的电子版,LZ要的话留邮箱吧。
      

  13.   

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

  14.   

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

  15.   


    嗯,最近我也看这本书了,在“鸡肋”与“糟粕”部分对javascript语法缺点吐槽的很给力。
    LZ我有这书的电子版,LZ要的话留邮箱吧。
    [email protected] 求书
      

  16.   

    for-in 的效率比其他几个形式低。eval 效率极低,能不用就不用。4和5 也都是效率问题。
      

  17.   

    不仅仅如此
    new Object 的效率低于{}
    new Array 的效率低于[]
      

  18.   

    通常是这样 
    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的属性名的情况下
      

  19.   

    new Function时作用域是全局的,this对象也是全局的,
    每个次执行都要重复创建,
    因些,作用域破坏了代码的可读性,效率低下
      

  20.   

    通常是这样 
    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语句枚举数组
    规范只是禁止forin枚举数组
    其实可以用forin来枚举obj的。
      

  21.   

    貌似4和5讨论的人较多哦。
    new Object 的效率低于{}吗?new Array 的效率低于[]吗?我不晓得哦。
    我觉着主要原因是Object和Array是可以被复写的。
    举个例子吧,万一在你写的代码之前出现过下面这句话:
    var Array = function(){
       alert("Hello,foo");
    }
    你再写一句
    var array = new Array();
    哇靠,大哥你干了什么,谁能知道。
      

  22.   

    高手谁把函数名和数组名起重名啊
    呃,高手肯定不会起这样的名字,但是高手也得防队友啊,谁也不知道你声明的new Arary是不是你真心想要的Array。
      

  23.   

    刚学习 js  ,受益匪浅 ,免得走弯路,顺便下了个JavaScript语言精粹 学习。