【问题标题】:checking variable using typeof and length使用 typeof 和 length 检查变量
【发布时间】:2017-11-28 13:27:59
【问题描述】:

我看到有人这样做

if(typeof myVar === 'string' && myVar.length > 0) {

}

为什么不只是if(myVar) {} ??

我使用 typeof 进行调试,从不在实际应用中使用它。

【问题讨论】:

  • 如果myVar 的值是18 或对象引用怎么办?该测试确保该值是非空字符串。只是测试它是否是真的可能会导致错误。
  • 显然是因为他们的myVar 并不总是一个字符串。当然,这不是最佳做法,但我们能做些什么呢?
  • 哪些人?他们在哪里做这个?你问过他们为什么吗?我们怎么知道,我们不是该代码的作者?
  • 这个问题最好在一个特定的上下文中回答,你看到这个结构被使用,我们可以看到周围的代码,然后回答为什么作者决定使用这个。显然,通用答案是因为作者想确保他们被传递一个不为空的字符串(不是数字,不是数组,不是对象,不是布尔值,等等......)。为什么要进行检查完全取决于您未包含的代码的上下文。

标签: javascript reactjs ecmascript-6


【解决方案1】:

if(myVar) {}),不检查 myVar 的值是否为字符串

typeof myVar === 'string' 可以帮助您做到这一点。

myVar.length > 0 用于检查 myVar 是否有一些字符,但它并非万无一失,因为即使空格也算作字符。例如:

让 x = ' ';

那么 x.length 为 2

希望这会有所帮助。

【讨论】:

  • 为什么重要的是使用“===”将 typeof 结果与常量进行比较?
  • 你也可以用==来比较。由于 js 的类型很松散,因此最好在任何地方使用 === 而不是 ==,但是 == 在这种类型的位置起作用,因为您确定 typeof 返回一个字符串。
  • 除此之外的其他地方都更好:) 速度呢?我测量并获得了 40-50% 的加速到非类型安全的平等。
  • 是的,就速度而言,我同意 == 更好,而且这个地方 == 会是仪式。
  • 好吧,这并不重要,因为在我的机器上有 40-50%,但我需要使用 1 亿次迭代的循环来测量 0.1 秒的差异。没有人在网页中运行巨大的循环。在这种情况下,关系的双方都是字符串。但我到处都能看到这个解决方案。为什么?没有人像我们一样思考吗?不明白 javascript 进化的方向 :(
【解决方案2】:

这是一场论战。

如果您编写代码,并且知道“myVar 是一个字符串”,那么您的语句就足够了

if(myVar){}

但是,如果猴子调用您的代码,或者任何不了解预期数据类型的人,您必须检查变量的类型以及其他事项。在这种情况下,您必须使用 === 而不是 ==,因为 typeof 函数返回非字符串值时会发生什么?

疯狂的世界

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 2013-05-12
    • 2016-07-23
    • 1970-01-01
    • 2013-10-24
    相关资源
    最近更新 更多