在JS中创建函数似乎有很大的反感。这种厌恶情绪导致人们试图变得聪明,并使用荒谬的把戏来使内容保持一致,就像函数调用一样。当然,调用中的函数名称也充当额外的文档。我们不能在棘手的表达式上附加注释,因为那样会破坏注释的意义,因此我们将其称为“ js惯用语”,突然间它是可以理解的。
JavaScript非常易于访问,大多数人不像我们一样吃早餐的规格。因此,他们将永远无法理解成语的隐藏假设和边缘情况。
x = x || 'default_value';
普通的joe可能不理解这一点,或者已经记住这是默认值的惯用法。两者都是有害的,实际上后者更为有害。他将在这里不了解假设和极端情况。他将不关心阅读规范并永远理解它。
当我看着代码,我看“,如果是null
或undefined
,然后将其设置到这个默认值。虽然它也可以隐式处理+0
,-0
,NaN
,false
,和""
不适合的值。我要记住,从现在是3个月的时候,需要改变。我可能会忘记它。”
隐含的假设极有可能在将来引起错误,并且当您的代码库中充斥着这样的技巧时,那么当您考虑修改会影响什么时,就没有机会将它们全都牢记在心了。这是针对“ JS专业版”的,即使要求从一开始就接受虚假的值,一般的乔也会编写该错误。
您的新代码段具有更熟悉的语法,但仍然存在上述问题。
您可以选择:
function f(x) {
x = valueOrDefault(x, "default_value");
}
现在,您可以使用非常复杂的逻辑来处理极端情况,并且客户端代码仍然看起来漂亮且可读。
现在,您如何区分高级语言功能(如将函数作为参数传递)或巧妙的技巧(如)|| "default"
?
巧妙的技巧总是在一些隐藏的假设下起作用,这些假设在最初创建代码时会被忽略。我将永远不必将IIFE修改为其他内容,因为需求已更改,它将始终存在。也许在2020年,我可以使用实际模块了,是的。
| 0
或~~num
用于地板的货物崇拜版本假定为正数和32位有符号整数边界。
|| "default"
假设所有伪造的值都等于根本不传递参数。
等等。