“void 0”和“未定义”之间的区别

2023-11-21

我在用着“关闭编译器”,在编译我的脚本时,我花费了以下内容:

编译前:

// ==ClosureCompiler==
// @compilation_level SIMPLE_OPTIMIZATIONS
// @output_file_name default.js
// @formatting pretty_print,print_input_delimiter
// ==/ClosureCompiler==

var myObj1 = (function() {

  var undefined;   //<----- declare undefined

  this.test = function(value, arg1) {

    var exp = 0;
    arg1 = arg1 == undefined ? true : arg1;  //<----- use declare undefined
    exp = (arg1) ? value * 5 :  value * 10;

    return exp;
  };

  return this;
}).call({});

var myObj2 = (function() {

  this.test = function(value, arg1) {

    var exp = 0;
    arg1 = arg1 == undefined ? true : arg1;  //<----- without declare undefined
    exp = (arg1) ? value * 5 :  value * 10;

    return exp;
  };

  return this;
}).call({});

编译:

// Input 0
var myObj1 = function() {
  this.test = function(b, a) {
    a = a == void 0 ? true : a;  //<-----
    var c = 0;
    return c = a ? b * 5 : b * 10
  };
  return this
}.call({}), myObj2 = function() {
  this.test = function(b, a) {
    a = a == undefined ? true : a; //<-----
    var c = 0;
    return c = a ? b * 5 : b * 10
  };
  return this
}.call({});

有了这个我相信“void 0”和“undefined”的使用问题,使用上有什么区别或者两种情况都很好吗?

Edit

如果我定义用“void 0”编译的“var undefined”,如果我没有定义用“undedined.”编译的“undefine”,那么就不是“undefine”和“void 0”之间的字符数问题

Test

编辑二:性能,基于这个链接

代码和测试

IE 8:
类型:228ms
未定义:62ms
无效 0:57 毫秒

火狐 3.6:
类型:10ms
未定义:3ms
无效0:3ms

歌剧 11:
类型:67ms
未定义:19ms
无效0:20ms

铬8:
类型:3ms
未定义:5ms
无效0:3ms


From MDN:

The void运算符评估给定的expression然后返回undefined.

该运算符允许将产生副作用的表达式插入到需要计算结果为未定义的表达式的位置。

void 运算符通常仅用于获取undefined原始值,通常使用“void(0)”(相当于“void 0")。在这些情况下,全局变量undefined可以改为使用(假设它尚未分配给非默认值)。

闭包编译器交换void 0因为它包含的字符少于undefined, 因此产生等效的、更小的代码.


回复:OP评论

是的,我阅读了文档,但在我给出的示例中,在使用“void 0”和另一个“未定义”的情况下“googleclosure”

我相信这实际上是一个Google Closure 编译器中的错误!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“void 0”和“未定义”之间的区别 的相关文章

  • 使用 ScriptEngine 从 JavaScript 调用 Java 方法

    我正在使用 ScriptEngine 运行 JavaScript 我希望 JavaScript 脚本能够调用 myFunction 其中 myFunction 是我的给定类中的一个方法 我知道可以将 importPackage 用于标准 J
  • 使用 AJAX 来回发送信息

    使用 post 你可以向服务器发送信息 但是当你需要从服务器接收信息时怎么办呢 信息如何从可以由 php 变量保存的方式变为可以由 javascript 变量保存的方式 反之亦然 这与您的问题更相关 http docs jquery com
  • 使用 HTML5 FileSystem API 将文件写入桌面

    我正在玩一下文件系统API http www html5rocks com en tutorials file filesystem 我发现了很多生成下载链接并让用户以 浏览器方式 下载文件的示例 我想知道两件事 有没有办法将fiddle中
  • Jest 中从未调用图像 onLoad 处理程序

    我正在尝试使用 Jest 测试将 dataUrl 加载到图像中 我正在使用 JSDOM 并按照说明添加resources usable 作为一个选项 如果我直接从 Node 运行该代码 则该代码可以工作 但是当我尝试在 Jest 中运行它时
  • Jqplot 中两个系列数据的不同颜色条

    我想知道如何在 Jqplot 中为两个系列制作不同的颜色条 如果我只有一个系列数据 它的工作原理如下图所示 红色和绿色基于其值 但是 如果我有两个系列数据 我无法为每个系列数据配置两个系列颜色 目前我只能做这个图 我希望两个系列图可以根据其
  • 将字符串转换为变量名。 (JavaScript)

    我确实查看了前面的问题 但它们是针对整数值的 我需要文本值的答案 我在本周早些时候问了一个与此相关的问题 但现在是这样 如下所示 我使 Make x 等于某个字符串值 Acura Honda Toyota 当我将 Make x 传递到函数
  • TypeScript 中类和命名空间的区别

    到底有什么区别classes and namespaces在打字稿中 我知道 如果您创建一个带有静态方法的类 您可以在不实例化该类的情况下访问它们 这正是我猜想的命名空间的要点之一 我还知道你可以创建多个同名的命名空间 并且它们的方法在编译
  • 为什么 JSON.stringify() 接受 Date 对象?

    至少在 Firefox 中 您可以对 Date 对象进行字符串化 gt gt gt JSON stringify now new Date now 2012 04 23T18 44 05 600Z 这是有效的 因为 在 Firefox 中
  • 使用 getElementById 在 javascript 中使用正则表达式进行 Html 表单验证?

    我想使用正则表达式验证 html 表单的示例模式 AAA 111 2222 aa 1234 目前 我的代码要么为所有输入返回 正确 要么为所有输入返回 不正确 并且我无法弄清楚我的问题出在哪里 var x document getEleme
  • Javascript 根据字段值任意排序数组

    所以我有一个对象数组 如下所示 var myArray priority low priority critical priority high 我需要以这种方式排序 1 关键 2 高和3 低 如何才能做到这一点 我建议使用一个对象来存储排
  • 如何正确关闭 Node.js Express 服务器?

    我需要在收到回调后关闭服务器 auth github callback网址 与平常一样HTTP API http nodejs org docs latest api http html关闭 服务器目前支持server close call
  • jQuery 问题:它的真正含义是什么?

    function window undefined jquery code jQuery window 它到底意味着什么 是不是也意味着 document ready 或者只是两种不同的东西 已经有两个答案 但这是我对代码缺失端的猜测 fu
  • Django 模板变量从 {% for %} 循环到 Javascript

    这是一个迭代记录的 Django 模板 每条记录都包含一个由 JS 函数填充的 div 为了让 JS 知道要做什么 它需要从每次 for 循环迭代中获取一个变量并使用它 我不知道具体如何实现这一目标或是否可能 我不知道 也许记录在单独的 J
  • 函数声明或函数表达式

    我刚刚在块作用域中定义函数时遇到了问题 考虑以下程序 try greet function greet alert Merry Christmas catch error alert error 我希望这个程序能够发出警报Merry Chr
  • Niceedit本地上传图片失败

    我是这样称呼编辑的 new nicEditor buttonList bold italic underline upload iconsPath img nicedit png uploadURI http server com inte
  • Node.js - Async.js:并行执行如何工作?

    我想知道 async js 中并行执行是如何工作的 async require async async parallel function callback for var i 0 i lt 1000000000 i Do nothing
  • 如何在 Astro 中的组件之间共享状态?

    我相信我在代码中采用了错误的方法 如何在按钮单击中设置客户端首选项 该按钮单击用作全局 astro 组件中的道具 或者我应该怎么做 我知道这是可能的 因为 astro js 本身在他们的文档网站中这样做了 下面是我的尝试的解释 我目前正在开
  • Javascript/DOM:如何删除 DOM 对象的所有事件侦听器?

    只是问题 有没有办法完全删除对象的所有事件 例如一个div 编辑 我添加每div addEventListener click eventReturner false 一个事件 function eventReturner return f
  • 使用重复模式捕获正则表达式

    我试图捕获字符串的所有部分 但我似乎无法正确处理 该字符串具有以下结构 1 22 33 中间有运算符的数字 可以有任意数量的术语 我想要的是 1 22 33 1 22 33 但我得到 1 22 33 22 33 我尝试过各种正则表达式 这是
  • ES6解构对象赋值函数参数默认值

    您好 我正在查看在传递函数参数时使用对象解构的示例对象解构演示 https developer mozilla org en US docs Web JavaScript Reference Operators Destructuring

随机推荐

  • 扩展由“from”和“to”列定义的范围

    此问题也称为 将 开始 结束 数据集转换为面板数据集 我有一个数据框包含 name 美国总统的任期开始和结束年份 from and to 列 这是一个示例 presidents lt data frame name c Bill Clint
  • 无法在java类中导入org.sun.management.OperatingSystemMXBean?

    我看到org sun management在 JRE 系统库中 但我无法在 Eclipse 中导入 允许的任何理由 连maven编译都失败 这是屏幕截图 我在用Java 8 我正在尝试这样做 if operatingSystemBean i
  • 如何在创建存储过程之前检查它是否存在

    我有一个 SQL 脚本 每次客户端执行 数据库管理 功能时都必须运行该脚本 该脚本包括在客户端数据库上创建存储过程 其中一些客户端可能在运行脚本时已经具有存储过程 而另一些则可能没有 我需要将缺失的存储过程添加到客户端数据库中 但无论我如何
  • SDL_Texture - 不完整类型

    一天前我安装了一个 SDL2 库 Debian Wheezy 中还没有 所以我使用了configure make make install命令 毕竟 当我尝试使用 SDL Texture 时 我收到此错误 error forward dec
  • Flexbox 子项收缩到某个点(但如果不需要则不会扩展)

    我这里有点问题 我有一个弹性盒子容器 里面有不同大小的孩子 根据数量和内容 子级可能会溢出父级 我想要的是孩子们缩小 这样他们尝试适应在父容器中 我通过向子级添加收缩和溢出属性来做到这一点 到目前为止 一切都很好 container gt
  • 加载DLL和直接调用之间的区别

    例如 我想使用像 GetWindowsDirectory 这样的 Windows API GetSystemInfo等等 我可以直接使用API 或通过调用GetProcAddress Method 1在这里我可以调用 APILoadLibr
  • 具有多个参数的 EXEC sp_executesql

    如何将参数传递给EXEC sp executesql表述正确吗 这就是我现在所拥有的 但我收到错误 alter PROCEDURE dbo usp getReceivedCases Add the parameters for the st
  • PHP 每次重新加载时都会创建新会话

    对于我的网站 会话管理大部分工作正常 会话的创建 保存和稍后使用都没有问题 但是当代码使用 session start 时 它总是创建新的 完全空的会话 下面有问题的代码 header Content Type text html char
  • 带有溢出菜单的自定义操作栏布局

    我用actionbarsherklock带有自定义操作栏的库如下所示 我的定制工具 ActionBar actionBar getSupportActionBar actionBar setDisplayOptions ActionBar
  • 如何延迟基本的 HTML 工具提示?

    我想知道是否有任何方法可以延迟经典的 HTML 工具提示 请不要使用像 qTip 这样的 jQuery 插件 它只是一个按钮
  • Android 中的 Sqlite 删除查询语法

    我想编写一个查询来从表中删除一行 我对写声明感到困惑 我在写这篇文章时需要一些帮助 我在这里用简单的 sql 语句提供我的要求 伪代码 delete from tablename where value string1 value2 str
  • System.out.println() 与 Java 中的 \n

    假设我想打印 5 行 这是最好的方法 对于性能和可读性 System out println System out println System out println System out println System out print
  • __init__.py 是做什么用的?

    What is init py在Python源目录中 它曾经是包的必需部分 旧的 3 3 之前的 常规包 not 较新的 3 3 命名空间包 这是文档 Python 定义了两种类型的包 常规包和命名空间包 常规包是 Python 3 2 及
  • 无法构建 open cv 2.3.1 源代码

    我在 ubuntu 11 04 中安装了 open cv 但每当我尝试运行任何代码时 我都会收到以下错误 OpenCV 错误 未指定错误 该功能未实现 使用 Windows GTK 2 x 或 Carbon 支持重新构建库 如果您使用的是
  • 当内存不足时,Android 不会终止堆栈中的活动

    我们一直在开发一个具有下拉仪表板的应用程序 允许用户在整个应用程序中导航 导航不是很标准 因为几乎可以从每个活动访问此菜单 使用菜单打开活动玩了一段时间后 堆栈开始不断增长 所有这些活动都包含列表视图 其中包含多个图像视图 每个视图大约需要
  • 如何使用 C# 提取括号之间的所有字符串?

    如果我有一个字符串 例如 您的 ID 是 1 您的电话号码是 0000000000 将这些字符串提取到字符串列表中的最佳方法是什么 括号之间的数字可以增加数字 因此搜索括号之间的字符串是更好的技术 我可以使用下面的代码提取括号之间的第一个字
  • 同步 sliderInput 和 textInput

    考虑以下闪亮的应用程序 library shiny User Interface UI ui lt fluidPage titlePanel Slider and Text input update titlePanel mainPanel
  • 如何通过意图添加带有名字和姓氏的联系人

    我正在尝试启动 android 本机 添加或编辑联系人 活动 其中一些数据已在表单中 这是我当前使用的代码 Intent intent new Intent Intent ACTION INSERT OR EDIT intent setTy
  • 有没有办法检测 JavaScript 中下载的开始?

    在我们当前的项目中 我们提供 PDF 下载 用户可以通过他提交的 HTML 表单进行自定义 动态生成 PDF 需要几秒钟的时间 我想将其可视化 例如禁用提交按钮直到下载开始 不幸的是 我找不到检测下载何时开始的方法 所以我不知道何时重新启用
  • “void 0”和“未定义”之间的区别

    我在用着 关闭编译器 在编译我的脚本时 我花费了以下内容 编译前 ClosureCompiler compilation level SIMPLE OPTIMIZATIONS output file name default js form