当前位置: 首页 > 知识库问答 >
问题:

typeof可以返回一个Falsey值吗?

商麒
2023-03-14

我无意中发现了一些有趣的代码。链接到代码

if (typeof data[Symbol.iterator]) { ... }

在我的理解中,typeof[data[Symbol.iterator]]应该是真实的,因为typeof返回一个字符串。比如:

const obj = {}
if(typeof(obj.x)){
  console.log("hello world");
}

发出“hello world”,因为偶数typeof(未定义)=

tldr:typeof是否有任何可能的错误结果?

共有1个答案

戎泰
2023-03-14

如下所述:

错误在ECMAScript 2015之前,typeof始终保证为其提供的任何操作数返回字符串。即使使用未声明的标识符,typeof也将返回“undefined”。使用typeof永远不会产生错误。

但是,如果在块中添加块作用域let和语句/const,在声明它们之前使用let上的typeof和const变量(或在类上使用typeof),将抛出ReferenceError。从块的开始到初始化处理,块作用域变量处于“暂时死区”,在此期间,如果访问,它将抛出错误。

typeof undeclaredVariable === 'undefined';

typeof newLetVariable; // ReferenceError
typeof newConstVariable; // ReferenceError
typeof newClass; // ReferenceError

let newLetVariable;
const newConstVariable = 'hello';
class newClass{};

通常,typeof()将返回一个字符串,因此,如果仅在条件中进行检查,则总是真实的。如果要检查变量并验证其是否未定义(或任何其他状态),可以使用以下条件:typeof(undefinedvariable)==“undefined”

 类似资料:
  • 问题内容: 我想创建一个函数来检查user_id是否已在我的数据库中。 但是,是第三方Firebase提供的API。它定义为return 。 (void)observeSingleEventOfType:(FEventType)eventType withBlock:(void(^)(FDataSnapshot * snapshot))块 错误: 感谢任何帮助。 更新 我正在尝试另一种方式: 不知

  • 问题内容: 除了使用关键字调用构造函数时,Java语言中的语句可以返回值的确切情况是什么? 例: 如果我没记错的话,如果它是一个非函数原语,将被返回。否则返回。这个对吗? 换句话说,什么值可以引起? 问题答案: 确切的条件在内部属性上进行了描述,该属性由操作员使用: 来自ECMA-262第3条。版本规格: 13.2.2 调用对象的属性时,将执行以下步骤: 创建一个新的本机ECMAScript对象。

  • 问题内容: 我已经使用Python多处理模块在Monte Carlo代码中实现了一些简单的并行性。我有看起来像的代码: 但是,当我查看结果列表时,似乎蒙特卡洛迭代器尚未启动。我知道它们有,因为我可以让这些过程在蒙特卡洛步骤中打印出信息。所以我在做些愚蠢的事情。我以为job.join()会阻止结果列表被构建,直到一切运行完毕,因此mc.results字段将被更新。 我意识到我还没有告诉您我的Mont

  • 问题内容: 我正在使用模拟器玩掷骰子,并且试图从同一方法返回两个值(或者我想这样做)。 当我写我的return语句时,我只是尝试放入“&”,它可以编译并正常运行;但是我无法访问第二个返回值。 当我将值返回为: 它适当地设置了赢或输的变量,但是如果我尝试执行以下语句中的简单操作: 它被分配与gamestatus相同的值… 0或1(赢或输)。以任何方式可以访问第二个返回值?还是有完全不同的方法来解决?

  • 在给定以下约束的情况下,是否可以以某种方式编译: 您不能向添加任何其他修饰符。 不包含或,您不能更改它。 无法将重写器添加到编译器管道。 您可以更改周围的其他所有内容。

  • 问题内容: 只是出于好奇。 数字似乎不太合逻辑。顺便说一句,就像或返回假。这是javascript的特性之一,还是有原因呢? 编辑:谢谢你的回答。但是,要让所有人适应现实并非易事。阅读答案和Wiki我了解得更多,但仍然有类似 与NaN的比较始终会返回无序结果,即使与自身进行比较也是如此。比较谓词是信令或非信令,信令版本表示此类比较的无效异常。相等和不相等谓词是无信号的,因此x = x返回false