【问题标题】:String concatenation with null's and undefined's in JavaScriptJavaScript 中与 null 和 undefined 的字符串连接
【发布时间】:2015-07-22 19:54:31
【问题描述】:

我一直认为使用这种console.log 公式的好处之一是可以避免空指针异常等:

var c = undefined;
console.log(c,"foo");

now we get 

"undefined 'foo'"

然而,似乎并没有太大的优势,因为使用 + 运算符似乎会在连接之前将 null 和 undefined 强制转换为字符串:

var c = undefined;
console.log(c + "foo");

这只是记录

"undefinedfoo"

有没有什么方法可以得到一个空指针或在 JS 中使用+ 运算符或console.log(x,y) 连接字符串时抛出的一些错误?您当然可以在执行undefined.concat('foo') 时得到空指针异常/错误。

在 JavaScript 中连接字符串时有什么方法可以得到空点异常?

【问题讨论】:

  • javascript 没有指针,因此获得空指针异常基本上是不可能的。
  • 好的,马克,那么当你调用 undefined.concat(''); 时会发生什么
  • "TypeError: undefined has no properties",如你所料...
  • 是的,因为 undefined 不指向具有 concat 函数属性的对象,touché en.wikipedia.org/wiki/Null_pointer
  • 不管网上怎么说,都是一样的汤,不要相信“JS没有空指针”的炒作

标签: javascript string


【解决方案1】:

在 JavaScript 中连接字符串时有什么方法可以得到空点异常?

技术上(JavaScript 没有空指针异常)。

虽然是的ES6 Symbols will actually throw if you try to implicitly coerce them to strings。此外,您还可以故意使用隐含的 toString() 行为:

var obj = { toString: function() { throw 'uh oh'; } };
console.log(obj + ''); // throws

对于日常开发假设字符串强制转换会成功是很安全的。不过,随着符号变得越来越普遍,这种情况可能会在未来几年发生变化。

【讨论】:

    【解决方案2】:

    简短回答:不。

    长答案:JavaScript 不强制类型,并且有点奇怪地处理类型转换。很高兴尝试将几乎任何东西都渲染为字符串而不会抱怨。

    但是,如果您想让 JavaScript 在字符串结果为空时出现异常,您可以使用断言。 JavaScript 没有像许多语言那样内置断言,但 this answer can help you to manually add an assert function。使用它,您可以执行类似的操作来强制字符串不为空:

    assert(typeof myString !== 'undefined')

    【讨论】:

    • “很高兴尝试将几乎所有内容渲染为字符串而不会抱怨”这是 99.9999999% 的准确率。请参阅我对 .0000001% 的回答。
    • @jmar777 我知道必须有一些不能被强制转换成字符串的东西!哦 JavaScript,你这个奇怪的生物。
    猜你喜欢
    • 2011-05-11
    • 2011-02-24
    • 2010-11-25
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 2020-12-05
    相关资源
    最近更新 更多