10

我已经编写 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

你有它,我列出的永远不要对你的同事做的事情的清单。

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

4

3 回答 3

15

这个问题可能会因为太宽泛而被关闭,并且这个答案可能会因为不直接回答而获得相当多的反对票,但这里是这样。

拜托拜托,在编程语言中使用“快捷方式”时要小心谨慎,因为……真的……他们在帮助谁?

大多数这些快捷键牺牲了击键的清晰度和明确性。你不会找到一个单一的、称职的、专业的编码人员会同意这是一个明智的权衡。

考虑

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

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

您已经保存了 4 个字符……哇!但是,您还保证任何不知道此快捷方式的人都有非常小的机会能够弄清楚这里发生了什么……而且肯定不容易。

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

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

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

于 2013-08-04T02:26:33.963 回答
4
  • n | 0楼层n(仅当n在有符号的 32 位整数范围内时)。它比Math.floor()我上次检查的大多数浏览器都要快。
  • undefined == null,但都不等于false
  • 而不是x == 'a' || x == 'b' || x == 'c',你可以做['a', 'b', 'c'].indexOf(x) !== -1

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

于 2013-08-04T02:25:57.867 回答
3

我经常看到这个:

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;

咖啡脚本

... 需要我多说?

于 2013-08-04T02:31:20.113 回答