首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么检查void 0比检查undefined要快得多?

检查void 0比检查undefined要快得多的原因是因为void 0是一个JavaScript中的特殊表达式,它的值始终为undefined。而检查undefined则需要访问全局作用域中的undefined变量。

在JavaScript中,undefined是一个全局变量,它的值是未定义的。当访问一个未声明的变量或者访问一个对象属性时,如果该变量或属性不存在,JavaScript会返回undefined。因此,当我们使用undefined进行判断时,实际上是在访问全局作用域中的undefined变量。

相比之下,void 0是一个更简洁、更直接的方式来表示undefinedvoid是一个一元运算符,它可以对任意表达式进行求值,并返回undefined。在void后面跟上任意表达式,无论这个表达式的值是什么,void的结果始终为undefined

由于void 0不需要访问全局作用域中的变量,所以它的执行速度更快。而检查undefined则需要在作用域链中查找undefined变量,这会导致一定的性能损耗。

总结起来,检查void 0比检查undefined要快得多是因为void 0是一个直接返回undefined的表达式,而不需要访问全局作用域中的变量。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JS 的6个不良编码习惯,现在就改掉吧!

基于JavaScript构建的应用程序的复杂性语言发展的速度还要快。这种情况迫使开发人员使用JavaScript技巧和变通方法,只是为了让事情正常运行。 一个典型的例子是查看数组是否包含某个元素。...==-1来检查。 ES6 及以后版本的功能要强大得多,可以使用新的语言特性安全地重构许多技巧。 ?...JavaScript隐式赋值给它 undefined。 访问不存在的属性 hero.city时,也会返回 undefined为什么直接使用 undefined是一个不好习惯?...一旦 null出现在调用堆栈中,就必须在每个可能访问 null的函数中检查它的存在,这很容易出错。...不要使用随意的编码风格,执行一个标准 有什么阅读具有随机编码风格的代码更令人生畏的事情?你永远不知道会发生什么! 如果代码库包含许多开发人员的不同编码风格,该怎么办?,这种就像各色人物涂鸦墙。 ?

1K10

5 个 JS 不良编码习惯,你占几个呢

基于JavaScript构建的应用程序的复杂性语言发展的速度还要快。这种情况迫使开发人员使用JavaScript技巧和变通方法,只是为了让事情正常运行。 一个典型的例子是查看数组是否包含某个元素。...== -1来检查。 ES6 及以后版本的功能要强大得多,可以使用新的语言特性安全地重构许多技巧。...JavaScript隐式赋值给它undefined。 访问不存在的属性hero.city时,也会返回undefined为什么直接使用undefined是一个不好习惯?...一旦null出现在调用堆栈中,就必须在每个可能访问null的函数中检查它的存在,这很容易出错。...不要使用随意的编码风格,执行一个标准 有什么阅读具有随机编码风格的代码更令人生畏的事情? 你永远不知道会发生什么! 如果代码库包含许多开发人员的不同编码风格,该怎么办?,这种就像各色人物涂鸦墙。

55050
  • js 的5个不良编码习惯,现在就改掉吧

    基于JavaScript构建的应用程序的复杂性语言发展的速度还要快。这种情况迫使开发人员使用JavaScript技巧和变通方法,只是为了让事情正常运行。 一个典型的例子是查看数组是否包含某个元素。...== -1来检查。 ES6 及以后版本的功能要强大得多,可以使用新的语言特性安全地重构许多技巧。 ?...JavaScript隐式赋值给它undefined。 访问不存在的属性hero.city时,也会返回undefined为什么直接使用undefined是一个不好习惯?...一旦null出现在调用堆栈中,就必须在每个可能访问null的函数中检查它的存在,这很容易出错。...不要使用随意的编码风格,执行一个标准 有什么阅读具有随机编码风格的代码更令人生畏的事情? 你永远不知道会发生什么! 如果代码库包含许多开发人员的不同编码风格,该怎么办?,这种就像各色人物涂鸦墙。

    85330

    TypeScript 初学者入门学习笔记(一)

    为什么使用 TypeScript?...一般来说,在大型项目中,后期维护成本前期开发成本要多得多,所以团队规范化尤为重要,包括编码规范,方法调用规范等,而TS可以通过代码的方式,约束团队开发,这样才有利于后期维护及扩展,从而达到高效的开发...空值 及(与Null 和 Undefined的区别) JavaScript 没有空值(Void)的概念,在 TS中,用 void 表示没有任何返回值的函数: function alertName():...void = undefined; Null 和 Undefined let u: undefined = undefined; let n: null = null; 区别:undefined 和...也就是说 undefined 类型的变量,可以赋值给所有类型的变量,包括 void 类型: let num: number = undefined; let u: undefined; let str

    1.8K20

    《JavaScript 模式》读书笔记(5)— 对象创建模式1

    因此,在添加一个属性或者创建一个命名空间之前,最好是首先检查它是否已经存在: // 不安全的代码 var MYAPP = {}; // 更好的代码风格 if(typeof MYAPP === 'undefined...比如,如果想要定义MYAPP.modules.module2,必须构造三次检查,每次检查都要针对定义的一个对象或者属性。这也就是为什么需要一个可以很方便地处理命名空间细节的可重用函数的原因。...parts = ns_string.split('.'), parent = MYAPP, i; // 剥离最前面的冗余全局变量 if(parts[0]...// 如果不存在就创建一个属性 if(typeof parent[parts[i]] === 'undefined'){ parent[parts[i]] = {...解析局部变量的速度总是要比解析全局变量要快,甚至使用全局变量的嵌套属性还要快,这导致了更好的性能。当使用这种依赖声明模式时,全局符号解析仅会在函数中执行一次。

    36010

    《JavaScript 模式》读书笔记(5)— 对象创建模式1「建议收藏」

    因此,在添加一个属性或者创建一个命名空间之前,最好是首先检查它是否已经存在: // 不安全的代码 var MYAPP = {}; // 更好的代码风格 if(typeof MYAPP === 'undefined...比如,如果想要定义MYAPP.modules.module2,必须构造三次检查,每次检查都要针对定义的一个对象或者属性。这也就是为什么需要一个可以很方便地处理命名空间细节的可重用函数的原因。...parts = ns_string.split('.'), parent = MYAPP, i; // 剥离最前面的冗余全局变量 if(parts[0]...// 如果不存在就创建一个属性 if(typeof parent[parts[i]] === 'undefined'){ parent[parts[i]] = {...解析局部变量的速度总是要比解析全局变量要快,甚至使用全局变量的嵌套属性还要快,这导致了更好的性能。当使用这种依赖声明模式时,全局符号解析仅会在函数中执行一次。

    24020

    TypeScript 4.2 正式发布:更智能的类型别名保留,声明缺失的帮助函数,还有许多破坏性更新

    然后,你可以使用 TypeScript 类型检查器来捕获许多常见错误,例如拼写错误、忘记处理null和undefined等等。...类型检查器必须从string | number | boolean | undefined的所有组合类型中来看看哪种类型别名被使用了,即使这样,string | number | boolean还可能有多个类型别名...然而,放松限制也意味着错误拼写一个显式声明的属性变得容易得多。...这个新的设置并不在strict标志家族中,因为我们相信用户会发现它在特定代码库上在其它代码库上更有用。...0) + 1; } 当然,对于字典中还没有任何电影标题,movieWatchCount[title]会报undefined(TypeScript 4.1 增加了--noUncheckedIndexedAccess

    3.2K20

    19 个 JavaScript 编码小技巧

    Short-circuit Evaluation 分配一个变量值到另一个变量的时候,你可能想要确保变量不是null、undefined或空。...做“如果检查”时,赋值操作符有时可以省略。 Longhand: ? Shorthand: ? 注:这两种方法并不完全相同,简写检查只要likeJavaScript是true都将通过。 这有另一个示例。...它本质上是一个写数字的奇特写法,就是一个数字后面有很多个0。例如1e7本质相当于10000000(1的后面有7个0)。它代表了十进制计数等于10000000。 Longhand: ?...强制参数 默认情况下,JavaScript如果不给函数参数传一个值的话,将会是一个undefined。有些语言也将抛出一个警告或错误。...Double Bitwise NOT运算符有很大的优势,它执行相同的操作要快得多。你可以在这里阅读更多关于位运算符相关的知识。 Longhand: ? Shorthand: ?

    81440

    JS魔法堂:从void 0 === undefined说起

    == "undefined" && person !== null ? person.name : void 0; ,那么void 0到底是什么意思呢?...运行得知void 0===undefined为true。那为什么不直接使用undefined而要使用void 0呢?而一元运算符void具体又有什么作用呢?下面将展开来说明。...二、为什么不直接用undefined                             undefined在JavaScript中并不属于保留字/关键字,因此在IE5.5~8中我们可以将其当作变量那样对其赋值..._view++; } }; var test = void article.view; // 显示0 console.log(test); // 显示undefined console.log(..._view); // 显示1    通过一元运算符 delete 作对比,delete的其中一个行为特点是不对其运算数进行取值操作(delete的其他行为特点比我们想的复杂得多,这里就不详细记录了) var

    1.7K70
    领券