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

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(赢或输)。以任何方式可以访问第二个返回值?还是有完全不同的方法来解决?

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

  • 问题内容: 如果是这样,在什么情况下? Javadoc和JPA规范什么也没说。 问题答案: 你是对的。JPA规范对此一无所获。但是 Java Persistence with Hibernate的第二版书 说: 如果查询结果为空,则返回null 调用query.getResultList()时,没有结果的Hibernate JPA实现(实体管理器)返回null。 更新 正如某些用户指出的那样,最新