请帮助我理解这段 JavaScript 代码片段中的“while”循环

2023-12-14

我见过这样的代码片段,用于使用条件注释在 JavaScript 中检测 IE。

var ie = (function(){

    var undef, v = 3, div = document.createElement('div');

    // the while loop is used without an associated block: {}
    // so, only the condition within the () is executed.

    // semicolons arent allowed within the condition,
    //   so a comma is used to stand in for one
    // basically allowing the two separate statements 
    //   to be evaluated sequentially.

    while (
        div.innerHTML = '<!--[if gt IE '+(++v)+']><i></i><![endif]-->',
        div.getElementsByTagName('i')[0]
    );

    // each time it's evaluated, v gets incremented and
    //   tossed into the DOM as a conditional comment
    // the i element is then a child of the div.

    // the return value of the getEBTN call is used as 
    //   the final condition expression
    // if there is an i element (the IE conditional
    //   succeeded), then getEBTN's return is truthy
    // and the loop continues until there is no 
    //   more i elements.

    // In other words:  ** MAGIC**

    return v > 4 ? v : undef;

}());

上面给出的是Paul Irish 记录(并略有改进)版本 on a 詹姆斯·帕多尔西摘录。我发布评论版本是为了让您知道,如果有人可能需要更简单的解释。

我真的很想知道while 循环内发生了什么。我不明白。


(假设我没有把这件事搞砸)while循环等效于以下内容:

var elt;

do
{
    v++;
    div.innerHTML = '<!--[if gt IE ' + v + ']><i></i><![endif]-->'
    elt = div.getElementsByTagName('i')[0];
} (while elt);

mdc 或任何好的内容是否涵盖了 while(stmt1, stmt2) 的事情。

MDC 是这样说的while:

while (condition)
    statement

condition
在每次循环之前评估的表达式。如果此条件评估为true, statement被执行。当条件评估为false,继续执行后面的语句while loop.

我们可以准确地找出什么是表达来自 MDC 的 JavaScript:

An 表达是任何有效的文字、变量、运算符和计算结果为单个值的表达式的集合;该值可以是数字、字符串或逻辑值。

从概念上讲,有两种类型的表达式:将值分配给变量的表达式和仅具有值的表达式。例如,表达式x = 7是一个将值 x 赋值为 7 的表达式。该表达式本身的计算结果为 7。此类表达方式使用赋值运算符。另一方面,表达式3 + 4简单地评估为七;它不执行任务。此类表达式中使用的运算符简称为运营商.

如果您有勇气,还可以查看ECMA-262 语言规范,特别是以下部分:

  • 11表达方式,特别是11.14逗号运算符 (, )
  • 12.6.2 The while陈述

Sorry I can't provide direct links as it's all inside of a PDF.

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

请帮助我理解这段 JavaScript 代码片段中的“while”循环 的相关文章

  • 使用 jQuery 更改父元素样式

    我有下一个 html 设置 div class one div class two a href class three Click a div div 我想更改具有类的元素的背景颜色 one当我点击元素时 three使用 jQuery 这
  • 如何向上转型以限制对象属性

    在 JavaScript 中 如何从子类向上转换到超类以自动删除超类中不存在的对象属性 示例 假设有以下 2 个类 class ClassA constructor public a string public b string class
  • MailTo 从 Javascript

    我有一个链接按钮 用于从页面内容构建邮件 从 javascript 启动它而不打开空白窗口或干扰调用它的窗口的最佳方法是什么 function Email var sMailTo mailto var sBody var alSelecte
  • 如何在通过 .ajaxForm() 提交表单之前执行一些操作?

    我正在使用 ajaxForm 框架来发送我的数据 而无需重新加载我的页面 ReplayForm ajaxForm success function data alert Success 现在 我想在提交表单之前检查一些条件 如果条件为假 则
  • Angular UI select:从远程服务获取数据

    我正在使用角度用户界面选择 https github com angular ui ui select https github com angular ui ui select 我查看了演示的可用位置这个笨蛋 http plnkr co
  • 如何判断一个网页是否支持jquery?

    确定网页是否启用 jquery 的最佳方法是什么 如果这是确定它的最佳方法 则使用 jquery 本身 if jQuery jquery object exists jQuery 并不神奇 它本质上只是一个大对象 您可以像检查任何其他对象一
  • 使用 Firefox 插件 sdk 的 nsISocketTransportService

    我正在尝试使用 Firefox 来读取 SSH 横幅 IE 当您最初连接到 SSH 服务器时 服务器会向您发送其横幅 标识服务器软件 并且您向 SSH 服务器发送您的横幅 标识您的客户端软件 为此 我使用以下 URL 中的示例 firefo
  • 检测 Google 验证码的挑战窗口何时关闭

    我正在使用谷歌隐形验证码 有没有办法检测挑战窗口何时关闭 我所说的挑战窗口是指您必须选择一些图像进行验证的窗口 目前 我在按钮上放置了一个旋转器 一旦单击按钮 就会呈现验证码挑战 无法向用户提示另一个质询窗口 我以编程方式调用渲染函数 gr
  • JS 保留以零结尾的小数[重复]

    这个问题在这里已经有答案了 在JavaScript中 是否可以 锁定 十进制数 以保留以零结尾的 浮点数 例如 我有 2 个不同的数字 如下所示 伪代码 let a 1 0 let b 1 00 a b true should be fal
  • 如何在 React Native 上显示 SVG 文件?

    我想显示 svg 文件 我有一堆 svg 图像 但我找不到显示的方式 我尝试使用Image and Use的组成部分反应本机 svg https github com magicismight react native svg但他们不这样做
  • 全局传递 xhr onload 函数的值

    在我正在创建的应用程序中 我有以下 XMLHttpRequest 并且我正在尝试传递结果data在 的里面xhr onload 到在同一父函数中创建的数组中 var url http api soundcloud com resolve j
  • 如何仅显示/隐藏此 bootstrapvue 表的第二列和第三列?

    下面的代码将显示 隐藏 a 中的所有列BootstrapVue桌子 代码的来源就是这里的答案 使用 bootstrap vue 组件和 bootstrap 3 动态显示 隐藏列 https stackoverflow com questio
  • 如何使用 window.onerror 捕获所有 javascript 错误? (包括道场)

    这个问题是后续问题javascript 如何在弹出警报中显示脚本错误 https stackoverflow com questions 2604976 javascript how to display script errors in
  • 类中可以有生成器 getter 吗?

    我的意思是吸气剂是发电机 我相信这一切都是 ES6 也许像这样 class a get count let i 10 while i yield i let b new a for const i of b count console lo
  • 如何在画布上所有其他内容后面绘制图像? [复制]

    这个问题在这里已经有答案了 我有一块画布 我想用drawImage在画布上当前内容后面绘制图像 由于画布上已经有内容 我正在使用字面上的画布来创建包含图像的画布 因此我无法真正先绘制图像 所以我无法使用drawImage在我呈现其余内容之前
  • 尝试使用 Javascript 解决对称差异

    我正在尝试找出对称的解决方案 使用 javascript 完成以下任务的差异 目标 接受未指定数量的数组作为参数 保留数组中数字的原始顺序 不删除单个数组中数字的重复项 删除数组中出现的重复项 因此 例如 如果输入是 1 1 2 6 2 3
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解
  • Chrome 扩展:强制 popup.html 关闭

    我想知道是否可以强制 popup html 关闭 在弹出的 javascript 中 window close
  • 将多维数组转换为单数组(Javascript)

    我有一个对象数组 来自 XLSX js 解析器 因此其长度和内容各不相同 表示已给予项目的资助 简化后 它看起来像这样 var grants id p 1 location loc 1 type A funds 5000 id p 2 lo
  • 如何在 Jquery/Javascript 中绑定模糊和更改,但只触发一次函数?

    我试图在选择元素更改时触发函数 由于 Ipad 在 on change 方面遇到问题 我还想绑定到 blur 这在 Ipad 上工作得很好 但是我不希望两个事件都触发该函数两次 所以我需要某种挂钩来确保两个事件是否都触发change and

随机推荐

  • 6000万条条目,精选某月的条目。如何优化数据库?

    我有一个包含 6000 万条条目的数据库 每个条目包含 ID 数据源ID 一些数据 DateTime 我需要选择特定月份的条目 每个月包含大约 200 万个条目 select from Entries where time between
  • Watir Webdriver(0.9.1) 不再打开 Firefox 实例

    在将 Watir Webdriver v0 9 1 用于 Rails 以及 Selenium Webdriver 2 53 1 时 Firefox 在打开时 browser Watir Browser new firefox 被称为 然而现
  • 推荐一种在Java中将同步方法转为异步的更好方法

    类中有一些同步运行的方法 我希望它们异步运行 第一个想法是包装它 并使用 switch 枚举来决定应该调用哪个函数 但对于调用的每个方法 我都需要包装类中的一个新方法和一个新的枚举 它看起来像这样 public class QueuedSh
  • 如何为工作表制作下拉列表

    我的工作簿中共有五张工作表 我的任务是在第一个工作表中创建一个组合列表按钮 该按钮将能够指向其他四个工作表 如果用户选择工作表名称之一 则该按钮将自动激活所选工作表 尽管可能会添加工作表 但不太可能删除工作表 我什至不确定如何让工作表名称显
  • 在 Selenium Android Webdriver 测试中使用 Xpath 和 CSS 查找元素有困难

    我想使用 Selenium WebDriver 自动化 Android Web 应用程序 并且我运行了一个简单的程序来打开 google 页面并搜索术语 当找到具有名称和 ID 的元素时 它运行完美 但是 尝试使用 Xpath 和 Css
  • AVPlayer 播放 m3u8 流时如何捕获图像?

    I use AVPlayer玩一个m3u8文件 我想在这些代码中捕获图像 AVAssetImageGenerator gen AVAssetImageGenerator alloc initWithAsset self player cur
  • Powershell 脚本输出到变量 - 捕获 Write-Host 输出

    使用这个脚本 https github com byterogues powershell bittrex api我从另一个脚本中调用它 e g order bittrex api ps1 action buylimit market BT
  • 使用 forcat::fct_reorder 对 facet_wrap 中的图进行排序

    我有一段时间内国家 地区级别的统计数据 我用facet wrap 按国家 地区绘制 但我想仅根据最新值 2015 按降序排列图 我尝试过使用transform 但这仅对第一个值 2005 进行排序 我认为forcats fct reorde
  • Firebase:removeUser()但需要删除存储在该uid下的数据

    我在用着Firebase并且需要添加一个删除用户 函数可以删除用户帐户 但是数据库中该 uid 下还存储有数据 是否有可能删除用户 函数也可以删除该数据 或者是运行另一个数据的唯一方法Firebase函数 remove 作为回调 谢谢 J
  • 验证具有空属性的 XML 架构

    我在验证 xml 架构时遇到问题 我在架构上遇到这些错误 113 18 s4s elt invalid content 1 AnonType user 的内容是 无效的 164 17 s4s elt invalid content 1 An
  • Excel VBA - 双击时将列中所有选定的单元格大写

    我有一个非常简单的 VBA 脚本 它将所选单元格大写 Private Sub Worksheet BeforeDoubleClick ByVal Target As Range Cancel As Boolean ActiveCell Va
  • 在 iOS 8 上捕获音量增大/减小按钮按下的最简洁方法

    捕获音量增大 减小按钮按下的最佳 最干净的方法是什么iOS 8 理想情况下 我想捕获按键并防止系统音量发生变化 或者至少防止 HUD 显示音量变化 有一些旧的答案使用已弃用的方法 并且似乎在 iOS 8 上根本不起作用 iOS 8 具体一也
  • 在自定义域中部署 Google Endpoint

    使用具有自定义域的 Google Cloud Endpoints 是否存在任何问题 然后我使用了它几个星期 部署后它停止工作 我看这里 我发现这个问题这说明目前还不允许 但这对我有用http www customdomain com ah
  • UML 用例图中是否存在泛化?

    我正在尝试对一些需求进行建模 并且在网上看到了一些带有用例概括的示例 但是UML 2 5 标准审查没有提到用例图中的泛化 或者我找不到它 那么 泛化有标准支持吗 由于用例是一个分类器 因此它们可以被泛化 UML 2 5 规范包含一个示例 如
  • 如何在 Swift 中表示质量大小?

    SI units enum Magnitude Measurement case Milli Measurement 3 ml case Centi Measurement 2 cl case Desi Measurement 1 dl c
  • 在 Javascript 中查找复选框是否获得焦点

    在 Javascript 中 我如何判断复选框是否具有焦点 我认为会有一个名为 isfocused 的方法或属性 但显然不是 我所说的焦点是指他们已经使用键盘切换到它 此时按空格键会选中该框 创建一个连接到 onfocus 事件的事件处理程
  • 按线程排序

    我有一项任务 需要工作代码 在开始之前我想了解这个问题 但我不知道如何写它 我有一组数据 以此为例 var arr new byte 5 3 1 7 8 5 3 2 6 7 9 3 2 4 2 1 我需要将此数组分成两半 将其放入线程池中并
  • xml 资源中的警告

    昨天我再次安装了 ADT 插件 因为我已经拥有的版本遇到了问题 间歇性 问题是 我没有在所有 xml 资源中收到警告 我非常确定我以前没有见过他们 其中一些很烦人 因为我对此无能为力 Nested weights are bad for p
  • Django 如何从给定模型实例的自定义字段调用方法?

    我有以下模型 class CustomField models CharField def foo self return foo class Test models Model col1 models CharField max leng
  • 请帮助我理解这段 JavaScript 代码片段中的“while”循环

    我见过这样的代码片段 用于使用条件注释在 JavaScript 中检测 IE var ie function var undef v 3 div document createElement div the while loop is us