【问题标题】:test if a variable is a primitive rather than an object? [duplicate]测试变量是否是原始变量而不是对象? [复制]
【发布时间】:2015-10-10 20:17:39
【问题描述】:

是否可以测试变量以查看它是否是原始变量?

我已经看到很多关于测试变量以查看它是否是对象而不是测试原语的问题。

这个问题是学术性的,我实际上不需要从我自己的代码中执行这个测试。我只是想更深入地了解 JavaScript。

【问题讨论】:

  • 一种特定类型的原语,还是任何旧的非对象原语?
  • 你试过typeof myVar !== 'object' && typeof myVar !== 'string'...吗?
  • 相关文档:typeof operator
  • @AnthonyGrist - 任何旧的非对象原语。
  • 这是许多问题的重复。

标签: javascript


【解决方案1】:

测试任何原语:

function isPrimitive(test) {
    return test !== Object(test);
}

例子:

isPrimitive(100); // true
isPrimitive(new Number(100)); // false

http://jsfiddle.net/kieranpotts/dy791s96/

【讨论】:

  • 当我觉得它有性能开销作为代码简单的代价时,我是对的吗?
  • @Zoltán Tamási,是的,你是对的,比 instanceof check 慢了大约 7 倍
  • 不值得编辑,但您不需要在函数声明后使用 ;(与 var isPrimitive = function(test) {...}; 等函数 表达式 不同)。
  • Object(undefined) !== undefined 为真
  • @Artemiy StagnantIce Alexeew 你没想到吗? Undefined 是原始类型。
【解决方案2】:

Object 接受参数,如果是对象则返回,否则返回对象。

然后,您可以使用严格相等比较,比较类型和值。

如果value 是一个对象,Object(value) 将是同一个对象,所以value === Object(value)。如果 value 不是一个对象,value !== Object(value) 因为它们会有不同的类型。

所以你可以使用

Object(value) !== value

【讨论】:

  • 当我觉得它有性能开销作为代码简单的代价时,我是对的吗?
猜你喜欢
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-30
  • 2011-08-05
  • 2019-12-05
  • 2012-09-15
  • 2018-01-01
相关资源
最近更新 更多