javascript|JavaScript 鸡肋( 二 )


Function 构造器是 eval 的另一种形式 , 所以它同样也应该被避免使用 。
浏览器提供的 setTimeout 和 setInerval 函数 , 它们能接受字符串参数或函数参数 。
当传递的是字符串参数时 ,setTimeout 和 setInterval 会像 eval 那样去处理 。 字符串参数形式也应该被避免使用 。
continue 语句continue 语句跳到循环的顶部 , 我发现一段代码通过重构移除 continue 语句之后 , 性能都会得到改善 。
缺少块语句if、while、do 或 for 语句可以接受一个花括号中的代码块 , 也可以接受单行语句 。 单行语句的形式是另一种带刺的玫瑰 。 它带来的好处是可以节约两个字节 , 但这是不是个好处值得商榷 。 它模糊了程序的结构 , 使得在随后的操作代码中可能很容易插入错误 。
if(ok)
t = true

可能变成:
if(ok)
    t = true    advance()

它看起来像是要这样:
if(ok){    t = true    advance()
但实际上它的本意却是:
if(ok) {    t = trueadvance()
貌似在做一件事 , 但实际上却是在做另一件事的程序是非常难理清楚的 。 严格规范并始终使用代码块会使得代码更容易理解 。
++ 和 --递增和递减运算符使得程序员可以用非常简洁的风格去编码 。
然而 , 这两个运算符容易促成一种不谨慎的编程风格 。 大多数的缓冲区溢出错误所造成的安全漏洞 , 都是由于像这样的编码所导致的 。
在我自己的实践中 , 我观察到 , 当我使用 ++ 和 -- 时 , 代码往往变得过为紧密、复杂和隐晦 。 因此 , 作为一条原则 , 我不再使用它们 。 那会让代码风格变得更为整洁 。
位运算符

符号意思
&按位与
|按位或
^按位异或
>>带符号的右移
>>>无符号的右移
<<无符号的左移
在 Java 里 , 位运算符处理的是整数 ,JavaScript 没有整数类型 , 它只是双精度的浮点数 。
因此 , 位操作符将它们的数字运算先转换成整数 , 接着执行运用 , 然后再转换回去 。 在大多数运算中 , 这些位运算符接近于硬件处理而非常快 , 在 JavaScript 中 , 它们非但不是硬件处理 , 而且非常慢 。 JavaScript 很少被用来执行位操作 。
另一个结果是 , 在 JavaScript 程序中 ,& 非常容易被误写为 && 运算符 。 位运算符出现在 JavaScript 中降低了这门语言的冗余度 , 使得 bug 更容易被隐藏起来 。
function 语句对比函数表达式JavaScript 中既有 function 语句 , 同时也有函数表达式 。 这是令人困惑的 , 因为它们看起来好像就是一样的 , 一个 function 语句就是其值为一个函数的 var 语句的速记形式 。
下面的语句:
funtion foo() {    
意思相当于
var foo    = function foo() {
我一直使用的是第二种形式 , 因为它能明确的表示 foo 是一个包含一个函数值的变量 。
要想用好这门语言 , 理解函数据数值是很重要的 。
function 语句在解析时会发生被提升的情况 , 这意味着不管 function 被放到哪里 , 它会被移动到被定义时所在作用域的顶层 。 这放宽了函数必须先声明后使用的要求 , 而我认为这会导致混乱 。
在 if 语句中使用 function 语句也是被禁止的 , 虽然在大多数浏览器中都允许在 if 语句里使用 function 语句 , 但它们在解析时的处理各不相同 , 那就造成了兼容性的问题 。