用于做常见事情的 JavaScript 习语

javascript idioms for doing common things

本文关键字:JavaScript 习语 常见事 用于      更新时间:2023-09-26

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

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

这里还能添加什么吗?

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

请,

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

这些快捷键中的大多数都牺牲了击键的清晰度和明确性。你不会找到一个单一的、有能力的、专业的程序员会同意这是一个明智的权衡。

考虑

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

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

您已经保存了 4 个字符...嗖!但是,您也保证任何不知道此快捷方式的人都非常小的机会能够弄清楚这里发生了什么......当然也不容易。

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

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

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

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

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

我经常看到这个:

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;

咖啡脚本

。需要我多说吗?