做常见事的javascript习语

时间:2013-08-04 02:12:56

标签: javascript

我已经编程了JS多年,我仍然在寻找新的快捷方式。 我想知道是否还有更多我不知道的事情。

以下是我所知道的快捷方式:

编辑:我同意你通常不应该做这些事情,并且可以有更好的方式来描述它不那么广泛,但我能做的最好的就是描述它示例


而不是这个

if("foobar".indexOf("foo") > -1) 

这样做

if(~"foobar".indexOf("foo"))

而不是这个

var foo = Math.floor(2.333)

这样做

var foo = ~~2.333

而不是这个

var foo = parseFloat("12.4")
var bar = parseInt("12", 10)

这样做(不是这个人的忠实粉丝)

var foo = +"12.4"
var bar = +"12"

而不是这个

if(isNaN(foo)

这样做

if(foo != foo)

而不是这个

(function(){ ... ])()

这样做

!function(){ ... }()

通过在!!

前面添加任何内容,将其转换为布尔值
var isFoo = !!foo

你有它,我的事情清单永远不会给你的同事。

可以在这里添加其他任何内容吗?

3 个答案:

答案 0 :(得分:12)

这个问题可能会因为过于宽泛而被关闭,而这个答案可能因为没有直接回答而得到了相当多的支持,但是这里也是如此。

,要非常谨慎地使用编程语言中的“快捷方式”,因为... 真的<他们帮助了谁?

这些快捷方式中的大部分都会牺牲击键的清晰度和明确性。你不会找到一个单一的,称职的,专业的程序员,他会同意这是一个合理的权衡。

考虑

if("foobar".indexOf("foo") > -1)

if(~"foobar".indexOf("foo"))

你已经保存了4个角色......呐喊!但是,你也保证,任何不知道这条捷径的人都很难有机会弄清楚这里发生了什么......当然也不容易。

阅读indexOf的定义足以理解显式版本。对于第二个,您需要了解~的含义(这在JS中是一个相当罕见的运算符)。然后,您需要知道-1的按位补码是什么。然后你需要意识到这是真的。

这是一个愚蠢的权衡,它是许多这些习语的标志。

请不要这样做。这不是80年代。

答案 1 :(得分:2)

  • n | 0 floor n(仅当n在有符号的32位整数范围内时)。在我检查的大多数浏览器中,它比Math.floor()快。
  • undefined == null,但两者都不等于false
  • 您可以x == 'a' || x == 'b' || x == 'c'
  • 取代['a', 'b', 'c'].indexOf(x) !== -1,而不是+

我在生产代码中看到的唯一真正简短的快捷方式是将字符串转换为数字的一元{{1}}。

答案 2 :(得分:2)

我经常看到这个:

myString = "Some string."
b = myString[myString.length - 1]; // get the period

应该是

b = myString.slice(-1);

for while循环。

for (var i=0; i < a.length; i++) {
    var x = a[i];
    console.log(x);
}

for (var i=0,x; (x=a[i++]) != null; ) {
    console.log(x);
}

将它放在脚本的顶部。

String.prototype.has = Array.prototype.has = function(a){ return this.indexOf(a) !== -1; }

转变这些

if (myString.indexOf(a) !== -1)
if (myArray.indexOf(a) !== -1)

到这些

if (myString.has(a))
if (myArray.has(a))

当你需要在你的代码中加入42,但是偷偷摸摸。

var answer = ((((1<<2)|1)<<2)|1)<<1;

的CoffeeScript

......需要我说更多吗?