Javascript - 具有多个语句的三元运算符

2023-12-13

这是有效的 JavaScript 吗?我看到一个示例,其中有人在三元运算符条件中使用逗号,它在我的编辑器中被标记为错误,并且该示例未在 Chrome 中运行。然而,它确实在 Firefox 中运行。当我将所有三元语句转换为 if/else 语句后,该应用程序就可以在 Chrome 上运行了。

a!==b ? (a=1, b=2) : (a=2, b=1)

Edit:

这是代码中的实际语句:

a!==0?b<0?(h=b/a,e=h-1,f=-2*b+2*a*e,i=-2*b+2*a*h,d=2*h*a-2*b-2*a):(h=b/a,e=h+1,f=2*b-2*a*e,i=2*b-2*a*h,d=-2*h*a+2*b):d=h=e=f=i=0

是的,它是有效的,并且在 Chrome 中运行良好:

var a, b, c;

a = 6;
b = 7;
c = a !== b ? (a = 1, b = 2) : (a = 2, b = 1);
console.log("a = " + a);
console.log("b = " + b);
console.log("c = " + c);

我并不是说这在代码中是一个好主意humans是为了阅读。 :-) 我希望 jamietre 在评论中说它看起来像是缩小的结果时是正确的。

The 逗号运算符是二元运算符(接受两个操作数的运算符)。它评估其左侧操作数(从而导致其具有的任何副作用,例如赋值),丢弃该结果,然后评估其右侧操作数(从而导致其副作用,如果有的话)并将该结果作为其结果结果值。如果一行中有多个逗号运算符,则按从左到右的顺序计算整个表达式,最终结果是最右边的操作数计算得出的值。

当然,您知道条件运算符(三元运算符 - 接受三个操作数)用于在初始表达式的基础上选择两个子表达式之一进行计算。

所以这句话非常...富有表现力...总共seven* 里面有不同的表达方式。

因此,在该示例中,如果a !== b最初,或1 if a === b最初,设置的副作用a and b.

在我看来,正是副作用使其成为一个值得怀疑的选择。当然,如果左侧操作数是doesn't有副作用。


* Yes, seven将它们打包到整个三元组中:

  • a !== b
  • 第一个逗号表达式
  • a = 1
  • b = 2
  • 第二个逗号表达式
  • a = 2
  • b = 1

用实际的语句重新编辑,该语句也有效:

function test(a) {
    var b = 7,
        d = 1,
        e = 2,
        f = 3,
        g = 4,
        h = 5,
        i = 6;
    
    a!==0?b<0?(h=b/a,e=h-1,f=-2*b+2*a*e,i=-2*b+2*a*h,d=2*h*a-2*b-2*a):(h=b/a,e=h+1,f=2*b-2*a*e,i=2*b-2*a*h,d=-2*h*a+2*b):d=h=e=f=i=0;
    
    console.log("a = " + a);
    console.log("b = " + b);
    console.log("d = " + d);
    console.log("e = " + e);
    console.log("f = " + f);
    console.log("g = " + g);
    console.log("h = " + h);
    console.log("i = " + i);
}

test(0);
test(1);
.as-console-wrapper {
  max-height: 100% !important;
}

但是哇,我希望这是缩小的,因为如果一个人写了这个,他们必须really对任何应该稍后维护它的人有异议...;-)

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

Javascript - 具有多个语句的三元运算符 的相关文章

  • createHTMLNotification() 替换

    我创建了一个 Chrome 扩展程序 其中使用createHTMLNotification 在所有内容之上显示一个窗口 然而 从 Chrome 28 开始 谷歌决定放弃createHTMLNotification 完全 为什么 谷歌 为什么
  • 将 Javascript 对象的属性从 string 更改为 int

    我有一个对象数组 每个对象具有三个属性 年份 总计 人均 例子 0 Object per capita 125 8 total 1007 2 year 2009 这些属性是字符串 我想创建一个循环来遍历数组并将它们转换为 int 我尝试了以
  • 浏览器视口大小(以设备像素为单位)

    Goal 我希望 Flash 能够获得有关浏览器视口宽度和高度 以设备像素为单位 的准确信息初始化 调整大小或浏览器缩放事件时 规格 我需要将 flash 嵌入到在 chrome safari firefox 等中运行的 html 页面中
  • 如何正确清理来自 AngularJS 控制器的无效输入的表单?

    我有一个 AngularJS 表单 其中包含 除其他字段之外 类型之一url 后者很重要 因为这会强制相应的输入成为有效的 URL 在某些条件下 例如 要关闭具有此类表单的模式对话框 我想以编程方式清除该表单 为此 我实现了方法reset基
  • 使用 Angular 指令禁用文本选择

    我正在学习 JavaScript 和 AngularJS 我想使用 Angular Directive 禁用文本选择 我有该函数的 JavaScript 代码 function clearSelection if document sele
  • .push() 将多个对象放入 JavaScript 数组中返回“未定义”

    当我将项目添加到beats数组然后console log用户时 我得到了数组中正确的项目数 但是当我检查 length 时 我总是得到 1 尝试调用索引总是会给我 未定义 如下所示 Tom beats 1 我想我错过了一些明显的东西 但这让
  • 使用 Node.js 构建网站的最佳实践

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我想知道如何使用 Node js 从头开始 开发一个网站 我明白我怎么能possibly
  • 如何使用有角度的材料创建卡片网格?

    我正在尝试使用 ng repeat 创建每行三张卡片的网格 我有一个普通的 javascript 对象数组附加到范围 下面的代码将为每张卡创建一个新行 div div
  • Number.IsNaN() 比 isNaN() 更糟糕吗

    Soooooo isNaNJavaScript 显然被破坏了 比如 isNaN isNaN isNaN true isNaN false isNaN 0 返回 false 当它们看起来都是 不是数字 在 ECMAScript 6 中 草案包
  • JavaScript 验证和 PHP 验证?

    我正在使用 jquery 验证插件来验证空表单 我还应该在 PHP 中检查一下以确保 100 正确吗 或者用 javascript 验证就可以了 谢谢 您应该始终在服务器上进行验证 如果用户以某种方式不使用 Javascript 提交表单
  • 为什么 setTimeout 在 Chrome 中触发两次,而在 IE 或 Firefox 中则不然?

    有人能告诉我为什么 javascript 函数 生成新号码 在 Chrome 中触发两次 但在 IE 或 Firefox 中则不会 使用 Chrome 20 0 1132 57 IE9 和 Firefox 13
  • React autoFocus 将光标设置为输入值的开头

    我有一个受控输入 最初显示一个值 我已将该输入设置为自动聚焦 但当我希望它出现在末尾时 光标出现在输入的开头 我知道这可能是因为自动对焦是在值之前添加的 但我不能 100 确定 在输入字段末尾完成光标初始化的最佳方法是什么 var Test
  • JavaScript 中的 Promise 有什么意义?

    一个承诺是一个 可能现在可用 或将来可用 或永远不可用的值 来源 MDN 假设我有一个想要处理图片的应用程序 图片已加载 例如在算法在后台使用它之后 或某种其他类型的延迟 现在我想检查一下图片是否可以在future 通过使用承诺 而不是回调
  • 计算三次贝塞尔曲线的弧长、曲线长度。为什么不工作?

    我正在用这个算法计算弧长 三次贝塞尔曲线的长度 function getArcLength path var STEPS 1000 gt precision var t 1 STEPS var aX 0 var aY 0 var bX 0
  • 如何在另一个自定义 Hook 中使用返回值的自定义 Hook?

    我正在使用 React native 其中有一个名为的自定义 HookuseUser使用以下方法从 AWS Amplify 获取用户信息Auth getUserInfro方法 然后获取返回对象的一部分并用它设置一个状态变量 我还有另一个名为
  • mongodb 聚合 - 累积字段的不同组值

    如果我有Player表格文件 name String score Int 我有Group文档 其中组代表玩家列表 groupName String players ObjectID 玩家可以属于多个组 我想做一个聚合Player文档 按以下
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • 使用 next.js 进行服务器端渲染与传统 SSR

    我非常习惯 SSR 意味着页面得到完全刷新并从服务器接收完整 HTML 的方法 其中根据后端堆栈使用 razor pub other 进行渲染 因此 每次用户单击导航链接时 它只会向服务器发送请求 整个页面将刷新 接收新的 HTML 这就是
  • react-native - 图像需要来自 JSON 的本地路径

    你好社区 我正在react native中开发一个测试应用程序 并尝试从本地存储位置获取图像 我实际在做什么 我将图像直接链接源提供给 var 并在渲染函数中调用此方法 react 0 14 8 react native 0 23 1 np
  • 在 iOS 7 Safari 中,如何区分通过边缘滑动与后退/前进按钮的 popstate 事件?

    在 iOS 7 Safari 中 现在有两种后退 前进导航方式 使用底部的传统后退 前进按钮箭头或从屏幕边缘滑动 我正在使用动画在 ajax 应用程序中的页面之间进行转换 但如果用户通过边缘滑动进行导航 我不想触发该转换 因为这本身就是一个

随机推荐

  • 在 python 中打开文件时,我不断收到“标识符中的无效字符”

    所以我尝试使用以下代码打开一个文件 open datapickle rb as f names F approximate pickle load f However I constantly get 我能做什么来解决这个问题 请帮忙 两个
  • SQL语法错误

    CREATE TABLE users id INT UNSIGNED NOT NULL AUTO INCREMENT type ENUM member admin NOT NULL username VARCHAR 30 NOT NULL
  • VTK 帧缓冲区和 OpenCV Mat 数据之间的转换

    我正在 VTK 中可视化数据 我想获取渲染窗口的帧缓冲区并在 OpenCV 应用程序中显示它 我目前正在尝试通过以下方式 void aig VirtualScene Mat cv Mat m typedef unsigned char pi
  • C# 中的密码加密?

    如何在 C 中加密和解密密码 谢谢你的帮助 首先 您实际上并不打算将加密密码保存在任何地方 而是执行单向哈希 例如 SHA 存储该哈希值 然后 当您向用户询问其密码时 您将执行相同的哈希 如果新的哈希值与存储的哈希值匹配 则说明匹配 哈希和
  • 在 python 应用程序中导入 Google Cloud Bigquery api 模块时出错

    我正在尝试将 bigquery 导入到我的 python 应用程序中from google cloud import bigquery并使用 dev appserver py 在本地运行它 但我收到一个错误 File Volumes Bud
  • Linux 上的 CreateFile CREATE_NEW 等效项

    我编写了一个尝试创建文件的方法 不过 我设置了标志 CREATE NEW 因此它只能在它不存在时创建它 它看起来像这样 for handle CreateFileA filePath c str 0 0 NULL CREATE NEW FI
  • ServiceStack客户端添加附件

    我正在使用 ServiceStack ServiceClient Web XmlServiceClient 连接到 Web 服务 有没有办法在请求中添加附件 更多信息 我想做的是避免使用 Microsoft Web Services2 因为
  • Bootstrap-Sass:使用另一个变量覆盖变量

    我在我的一个项目中使用 Bootstrap sass 并且我想使用 Sass 变量对其进行自定义 当然 我创建了一个名为 variables scss 的新 scss 文件 并将其导入到 bootstrap sass 文件之前的主 scss
  • 如何在后续瀑布步骤中检索自适应卡的表单提交

    我正在使用 Bot Framework V4 并且我有一个包含两个步骤的 WaterfallDialog 第一步是捕获表单数据 第二步是处理表单数据 第一步发送回复 private async Task
  • ASP.NET 中第一次单击时按钮 OnClick 未触发?

    protected void ButtonCancel Click object sender EventArgs e Response Redirect Logon aspx 第一次单击取消按钮时这不起作用 确保仅在以下情况下才绑定到事件
  • 关于本地数据库与基于服务的数据库的问题

    我对本地数据库和基于服务的数据库有一些疑问 使用基于服务的数据库是否需要用户安装 SQL Server 如果是这样 有什么办法可以解决吗 本地数据库是否要求用户安装 SQL Server 本地数据库和基于服务的数据库有什么区别 我说的是Vi
  • Java 正则表达式模式

    我需要帮助解决这件事 查看以下正则表达式 Pattern pattern Pattern compile A Za z A Za z Matcher matcher pattern matcher s1 我想查找这样的单词 自制 aaaa
  • 如何在 iPhone 上从 UIWebView 的 HTML 引用本地图像文件?

    我想用 img src temp jpg 在我的 UIWebView 的 HTML 中 如何引用名为的本地文件temp jpg节省宝贵的加载时间 当然 显而易见的选择是 img src 但我不知道我的根在哪里 这将创建一个 URL 对象 其
  • Pyramid 中的 HTML 表单名称数组解析 (Python)

    有什么办法可以Pyramid处理 HTML 表单输入 如下所示
  • 如何像 Spotify 的播放器一样创建居中的 UICollectionView

    我在尝试创建像 Spotify 播放器中那样的 UICollectionView 时遇到了很多困难 其行为如下 对我来说问题有两个 1 如何将单元格居中 以便您可以看到中间的单元格以及左侧和右侧的单元格 如果我创建方形单元格并在每个单元格之
  • 未捕获的 ReferenceError:Flutter 中未定义 firebase

    我无法初始化 Firebase在我的 Flutter 项目中我尝试过输入 the firebase app js firebase auth js and firebase analytics js但我目前正在使用的没有任何效果Fireba
  • MYSQL 没有向我的数据库添加信息

    我有一个表单 用于向数据库添加信息 但查询将无法正常运行 并且根本没有添加信息 这是我尝试执行的 php 代码 但它不断遇到第一个错误或完全转到最后一个 else 语句
  • JavaFX:ListView 未在 GUI 中显示

    我的问题是我的 ListView 在 GUI 上没有显示任何内容 我添加了一个占位符进行测试 它确实显示了占位符文本 但除此之外我无法添加到列表中 我的目标是获得所有客户帐户的列表 我已包含 Account 类 我想在 ListView 中
  • 使用 Java 打印菱形

    我想在 Eclipse 的输出控制台上打印网格形状 基本上 我从用户那里获取了一个整数 它是网格单个边框中的星星数量 这是我到目前为止的代码 public class PrintDiamond public static void main
  • Javascript - 具有多个语句的三元运算符

    这是有效的 JavaScript 吗 我看到一个示例 其中有人在三元运算符条件中使用逗号 它在我的编辑器中被标记为错误 并且该示例未在 Chrome 中运行 然而 它确实在 Firefox 中运行 当我将所有三元语句转换为 if else