编程语言
首页 > 编程语言> > 具有null或未定义值的JavaScript字符串连接行为

具有null或未定义值的JavaScript字符串连接行为

作者:互联网

您可能知道,在JavaScript中”null =“null”和”undefined =“undefined”(在大多数浏览器中我都可以测试:Firefox,Chrome和IE).我想知道这种奇怪的起源(Brendan Eich头脑中究竟是什么?!)以及是否有任何改变ECMA未来版本的目标.让’sthg'(var ||”)将字符串与变量连接起来并使用像Underscore或其他的第三方框架那样使用锤子进行果冻钉敲击确实非常令人沮丧.

编辑:

为了满足StackOverflow所要求的标准并澄清我的问题,它有三个:

>在字符串连接中,JS将null或undefined转换为字符串值的奇怪背后的历史是什么?
>在将来的ECMAScript版本中,是否有可能改变这种行为?
>将String与潜在的null或未定义的对象连接起来的最漂亮的方法是什么,而不会陷入这个问题(在String的中间获得一些“null”的“null”)?根据主观标准最漂亮,我的意思是:简短,干净,有效.没必要说”(obj?obj:”)不是很漂亮……

解决方法:

What is the prettiest way to concatenate String with potential null or undefined object without falling into this problem […]?

有几种方法,你自己部分提到它们.简而言之,我能想到的唯一干净的方法是功能:

const Strings = {};
Strings.orEmpty = function( entity ) {
    return entity || "";
};

// usage
const message = "This is a " + Strings.orEmpty( test );

当然,您可以(并且应该)更改实际实施以满足您的需求.这就是我认为这种方法优越的原因:它引入了封装.

真的,如果你没有封装,你只需要询问“最漂亮”的方式.你问自己这个问题,因为你已经知道自己会进入一个你无法改变实现的地方,所以你希望它能够立刻完美.但事情就是这样:需求,观点甚至环境都会发生变化.他们进化了.那么为什么不让自己改变实现只需要调整一行,也许一两次测试?

你可以称之为作弊,因为它并没有真正回答如何实现实际的逻辑.但这是我的观点:没关系.好吧,也许一点点.但实际上,没有必要担心,因为改变是多么简单.而且由于它没有内联,它看起来也更漂亮 – 无论你是以这种方式还是以更复杂的方式实现它.

如果在整个代码中,您不断重复||内联,你遇到两个问题:

>您重复代码.
>并且因为您复制了代码,所以将来很难进行维护和更改.

在高质量的软件开发方面,这些通常被认为是反模式的两点.

有人会说这太开销了;他们会谈论表现.这是无意义的.首先,这几乎不会增加开销.如果这是你担心的,你选择了错误的语言.甚至jQuery也使用函数.人们需要克服微观优化.

另一件事是:你可以使用代码“compiler”= minifier.此区域中的好工具将尝试在编译步骤中检测要内联的语句.这样,您可以保持代码的清洁和可维护性,如果您仍然相信它或者确实有一个重要的环境,那么仍然可以获得最后一滴性能.

最后,对浏览器有一定的信心.他们将优化代码,这些天他们做得非常好.

标签:javascript,null,undefined,string-concatenation
来源: https://codeday.me/bug/20190928/1827012.html