我可以将变量设置为未定义或将未定义作为参数传递吗?

2024-02-20

我对 JavaScript 有点困惑undefined and null values.

什么是if (!testvar)实际上呢?它是否测试undefined and null要不就undefined?

一旦定义了变量,我可以将其清除回undefined(因此删除变量)?

我可以通过吗undefined作为参数?例如。:

function test(var1, var2, var3) {

}

test("value1", undefined, "value2");

我对 Javascript undefined & null 有点困惑。

null通常,其行为与其他脚本语言的带外“null”、“nil”或“None”对象的概念类似。

undefined另一方面,这是一个奇怪的 JavaScript 怪癖。它是一个代表带外值的单例对象,本质上是第二个相似但不同的对象null。它出现了:

  1. 当您调用参数少于参数列表中的函数时function语句列表,未传递的参数设置为undefined。您可以使用以下方法进行测试:

    function dosomething(arg1, arg2) {
        if (arg2===undefined)
        arg2= DEFAULT_VALUE_FOR_ARG2;
        ...
    }
    

    使用这种方法你无法区分dosomething(1) and dosomething(1, undefined); arg2两者的值相同。如果您需要区分差异,可以查看arguments.length,但是像这样执行可选参数通常不太可读。

  2. 当一个函数没有return value;,它返回undefined。一般不需要使用这样的返回结果。

  3. 当您通过具有var a块中的语句,但尚未为其赋值,它是undefined。再说一次,你不应该真的需要依赖它。

  4. 诡异的typeof运算符返回'undefined'当它的操作数是一个不存在的简单变量时,而不是像尝试引用它时通常会发生的那样抛出错误。 (您也可以给它一个用括号括起来的简单变量,但是not涉及不存在变量的完整表达式。)这也没有多大用处。

  5. 这是有争议的一点。当您访问不存在的对象的属性时,您不会像其他语言那样立即收到错误。相反,你会得到一个undefined目的。 (然后当你尝试使用它时undefined稍后在脚本中调用对象时,它会以一种奇怪的方式出错,这比 JavaScript 立即抛出错误更难以追踪。)

    这通常用于检查属性是否存在:

    if (o.prop!==undefined) // or often as truthiness test, if (o.prop)
       ...do something...
    

    但是,因为您可以分配undefined与任何其他值一样:

    o.prop= undefined;
    

    这实际上并不能检测该属性是否可靠地存在。更好地使用in运算符,它不在 JavaScript 的原始 Netscape 版本中,但现在随处可用:

    if ('prop' in o)
        ...
    

总之,undefined这是 JavaScript 特有的混乱,让每个人都感到困惑。除了可选的函数参数之外,JS 没有其他更优雅的机制,undefined应该避免。它不应该成为语言的一部分;null对于(2)和(3)来说本来可以很好地工作,而(4)是一个错误特征,它的存在只是因为在开始时 JavaScript 没有例外。

什么是if (!testvar)实际上呢?它测试未定义和空还是只是未定义?

这样的“真实性”测试会检查false, undefined, null, 0, NaN和空字符串。但在这种情况下,是的,确实如此undefined它涉及到。 IMO,应该更明确地说明这一点并说if (testvar!==undefined).

一旦定义了变量,我可以将其清除回未定义(因此删除该变量)。

你当然可以分配undefined到它,但这不会删除变量。只有delete object.property操作员确实删除了东西。

delete实际上是针对属性而不是变量本身。浏览器会让你直接逃脱delete variable,但这不是一个好主意,并且在 ECMAScript 第五版的严格模式下不起作用。如果你想释放对某些东西的引用,以便它可以被垃圾收集,更常见的说法是variable= null.

我可以将 undefined 作为参数传递吗?

Yes.

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

我可以将变量设置为未定义或将未定义作为参数传递吗? 的相关文章

  • Chart.js 刻度线和 X 轴之间的空间

    我正在使用 Chart js 版本 3 x 制作一个简单的画布 它只是显示价格的演变 X 轴用于时间 Y 轴用于进化百分比 我已经成功做到了这一点 但现在 我想添加一些风格 我的目标是在标记刻度和 X 轴之间添加一些空间 我用过chart
  • 支持 Javascript 链式关系运算符吗?

    我只是尝试了一些 JS 核心原则 发现引擎评估链式关系运算符时不会抛出错误 相反 他们以一种我自己无法理解的方式进行评估 console log 1 lt 2 lt 3 lt 4 lt 5 true expected console log
  • Node JS 如何将图像和请求数据一起 POST 到另一个服务器/api

    我正在尝试将图像从 Node JS 应用程序发布到另一个 REST API 我在 Mongo DB 中有图像 作为二进制数组数据 由 Node JS 读取 然后应该发布到另一个 API 我面临的问题是如何将请求数据与图像一起发送 我有这个原
  • 如何隐藏 webpack-dev-server 日志?

    一旦 webpack dev server 启动 控制台将输出 wds Project is running at https 127 0 0 1 3002 wds webpack output is served from wds Con
  • JavaScript 中使用 eval() 执行用户输入的安全风险

    我计划为我的学生制作一个快速网页来教他们 JavaScript 编程 在此页面上 我想为他们提供一个文本框并允许他们运行 JavaScript 以便他们可以看到该语言在工作中的动态特性 然而 我很清楚 对用户输入使用 eval 通常是一个非
  • 使用 Asynchronous ReadableStream 和 Response 从 Service Worker 的 fetch 事件返回 HTML

    这个问题类似于我的另一个问题 https stackoverflow com questions 62457644 use readablestream with response to return html from fetch eve
  • 在主干/下划线模板中使用循环

    我有一个backbone js underscore js 模板 我将其输入到主干视图中进行渲染 视图传递一个包含数组的模型posts对象 我称之为post在模板中 Problem 当我尝试循环遍历数组的所有元素时posts 我收到一个错误
  • 分层边缘捆绑:添加父组标签

    我对 HTML 和 JavaScript 还很陌生 我面临着著名的分层边缘捆绑可用here https bl ocks org mbostock 7607999 由 D3 js 库生成 My goal is to add a semi ci
  • 将颜色渐变应用于网格上的材质 - Three.js

    我有一个 STL 文件加载到我的场景中 并将单一颜色应用于 phong 材质 我想要一种方法 将两种颜色应用于该网格物体的材质 并在 Z 轴上应用渐变效果 如下例所示 渐变花瓶 https i stack imgur com Ty9gq j
  • AJV自定义关键字验证

    我正在使用 AJV 库来验证我的 JSON 架构 我希望能够验证Startdate成为一个字符串 如果不是字符串 则应将其转换为N A 目前 它仅转换undefined to N A 但是 在这些情况下 它不会按预期工作 null gt 空
  • 动态创建多个上传文件

    我想知道是否有人知道动态创建上传表单的最佳方法 这就是我想要实现的目标 下面显示的代码允许一次上传 我想要一个按钮 按下该按钮后 应添加另一种形式用于文件上传 因此 如果我想上传 假设有 7 个文件 我想按按钮 7 次来创建这些上传表单 每
  • 在 JS 中的浏览器中输入 url 时,偏移哈希标签链接以调整固定标头

    我希望创建一个页面 允许哈希标签跳转到页面的某些内容 e g http example com page1 http example com page1是一个普通页面 http example com page1 info http exa
  • 我想从 Cakefile 运行 d3

    我想从命令行执行一些 d3 代码 最初我只是尝试了类似的方法 task data Build some data with d3 gt d3 require lib d3 v2 console log d3 version d3 versi
  • 将数组中的项目移动到最后一个位置

    我有一系列对象 我想将选定的对象移动到数组中的最后一个位置 我如何在 javascript 或 jquery 中执行此操作 这是我的一些代码 var sortedProductRow this product row for var s i
  • Spring MVC - 两次提供内容

    我已经花了一周时间寻找有关如何将内容服务器到我的网页的指导 两次 因为使用 Model 或 ModelAndView 切断内容一次可以工作 但如果用户再次与页面交互 我希望它加载更多内容同一页 Java Spring 后端方法 Get 有效
  • 有没有办法向 JavaScript 对象添加元数据?

    我想将元数据的键值对添加到任意 JavaScript 对象 此元数据不应影响不知道元数据的代码 这意味着例如 JSON stringify obj JSON stringify obj WithMetaData key value 元数据感
  • 使用两个键执行自动完成 - Material UI with React

    当使用两个值之一搜索时 我试图自动完成输入 title and year 但是 它仅在我搜索时才有效title 当我搜索时year 它不显示任何选项 示例代码 export default function ComboBox return
  • 返回深度嵌套数组中对象的索引的函数

    我可能需要编写一个函数 仅输出数组内对象的索引 显然 使用 inArray 在下面的示例中返回这个索引就可以了 array one two three inArray one array 0 对于更复杂的数组 如何找到嵌套对象的索引 arr
  • Firefox 中的代理设置不会“粘连”

    在家里我们有一个代理服务器 在工作中我们不会 Firefox 在这方面令人恼火 每当我启动它时 它都会默认使用代理服务器 如果我执行 工具 gt 选项 gt 设置 并选择 无代理 则没有问题 但是 如果我关闭 Firefox 并重新启动它
  • 如何使用 Playwright 打开新选项卡(例如,单击按钮在新选项卡中打开新部分)

    我正在寻找针对当前情况的更简单的解决方案 例如 您打开 google 任何其他网站 并且希望通过单击按钮 例如 Gmail 使用 Playwright 在新选项卡中打开此页面 let browser page context describ

随机推荐

  • 通配符子域和子文件夹作为 .htaccess 中的参数

    我有一个门户网站http www mysite com http www mysite com 客户在其中注册并获得自己的网站子域版本来运行我的应用程序 我已经设置了通配符子域 DNS VirtualHost 等并使其正常工作 我想要设置的
  • ASP.NET Core 中的服务器端图形

    我最近将 ASP NET MVC 应用程序从 ASP NET 升级到 ASP NET Core 在我的控制器操作中 我有一段依赖 System Drawing 来创建个人资料图片的代码 using FileStream stream new
  • 在 JUnit 测试中的 MockHttpServletRequest 中设置 @ModelAttribute

    我正在尝试测试 spring mvc 控制器 其中一种方法采用表单输入作为 POST 方法 该方法通过一个获取表单的commandObject ModelAttribute注解 如何使用 Spring 的 Junit 测试设置此测试用例 控
  • “在惯常位置找不到 Google Cloud SDK,并且未提供路径。”詹金斯

    我对詹金斯很陌生 但几天来我一直在寻找这个问题的答案 我在 localhost 8080 上运行 jenkins 我用 Java 编写了一个程序 它使用 gradle 部署到 Google App Engine 云 现在我想使用 Jenki
  • Tensorboard 陷入“命名空间层次结构寻找相似子图”的困境

    我尝试通过 Tensorboard 可视化 CNN 的迭代过程 但浏览器总是卡在 命名空间层次结构查找相似子图 中 然后崩溃 QAQ为什么会出现这种情况 我该如何修复它 陷入 命名空间层次结构寻找相似子图 的困境 https i stack
  • DBI::InterfaceError:无法加载驱动程序(未初始化常量 MysqlError)

    我已经包括了宝石 dbd mysql 0 4 4 dbi 0 4 5 mysql 2 8 1 当我运行以下代码时 在 Rails 控制台上 require rubygems require dbi require dbd mysql dbh
  • 增加边框宽度时如何防止相邻元素移动?

    我有一个由盒子组成的简单布局 action box width 300px height 200px border 1px solid black float left margin left 10px margin top 10px ac
  • iOS - 动画效果 - 图像弹出

    我希望 iPhone 应用程序中的图像能够 弹出 在屏幕上 而不仅仅是出现 我所说的 弹出 是指它会从小点增长到实际大小 作为参考 这与 Keynote 中的 pop 动画效果完全相同 我对 iOS 动画完全陌生 所以如果有人能指出我需要使
  • Wordpress EC2 上的永久链接

    我刚刚将我的博客从本地网络服务器转移到 Amazon EC2 Free Linux 服务器 现在除了永久链接之外一切似乎都正常 我禁用并重新启用它们 但它仍然中断 我尝试过运行脚本 sudo a2enmod rewrite 但它说 a2en
  • 又名获取计划。又名获取组。 QueryDSL 中的实体图

    我无法找到任何在 QueryDSL 中实现获取计划的方法 我尝试了很多 你能为我提供任何提示吗 另外 您是否知道在不同情况下选择要获取哪些字段以及延迟加载哪些字段的更好方法 我使用批量获取 因此无法使用 JOIN FETCH 使用这样的 E
  • 选择包含日语字符的 MySQL 行

    有人知道一种可靠的方法 使用 mySQL 或其他方式 来选择数据库中包含日语字符的行吗 我的数据库中有很多行 其中一些仅包含字母数字字符 其中一些包含日语字符 当您遇到字符集问题时的规则 创建数据库时使用utf8编码 CREATE DATA
  • webpack 从多个入口文件导出类

    我正在使用 webpack 捆绑一个框架供第三方使用 该框架应该公开多个 ES6 类 我以模块化方式构建 每个文件编写一个类 我想要做的是将所有这些文件构建在一起 并将它们捆绑在给定的 命名空间 下 例子 苹果 jsexport class
  • 从字符串获取python类对象[重复]

    这个问题在这里已经有答案了 可能的重复 Python 中的动态模块导入 https stackoverflow com questions 301134 dynamic module import in python 可能是一个简单的问题
  • 运行 Maven 安装时如何跳过许可证检查?

    I ran a mvn clean install在我从事的一个大型 Java 项目中 由于某些文件没有正确的许可证头 该项目一直失败 好吧 这不是我现在关心的问题 我该如何跳过呢 我看到的实际错误是 Failed to execute g
  • 计算 Java 函数的签名

    有没有办法computeJava 类的方法的签名 一个签名 like Ljava lang String V表示一个函数 它采用String 作为论据并返回void 什么是rule计算签名 它始终是一组括号 其中包含参数的类型指示符 一个接
  • 如何使用 Grand Central Dispatch 并行化数独求解器?

    作为编程练习 我刚刚编写了一个使用回溯算法的数独求解器 请参阅维基百科 http en wikipedia org wiki Algorithmics of sudoku Example of a brute force Sudoku so
  • python中如何检查变量是否为空?

    我想知道python是否有任何函数 例如php空函数 http php net manual en function empty php 它检查变量是否为空并符合以下条件 an empty string 0 0 as an integer
  • Git 在提交之前存储特定文件

    我不确定我正在寻找的是不是git stash但这就是我想做的 我有为本地使用定制的配置文件 这些文件已经存在于 Git 中 现在 如果我添加新功能 更改其他文件 我想存储我的配置并点击提交 并且仅提交与我的新功能相关的文件 如果我使用 gi
  • ASP.NET Core如何执行Linux shell命令?

    我在 Linux 上有一个 ASP NET Core Web 应用程序 我想执行 shell 命令并从命令中获取结果 有没有办法从 ASP NET Core 应用程序中执行 Linux shell 命令并将值返回到变量中 string Ru
  • 我可以将变量设置为未定义或将未定义作为参数传递吗?

    我对 JavaScript 有点困惑undefined and null values 什么是if testvar 实际上呢 它是否测试undefined and null要不就undefined 一旦定义了变量 我可以将其清除回undef