此比较行为是否定义良好
Is this comparison behavior well-defined?
var x = 'foo';
var y = 'bar';
var isItDefined = (x !== (x = y)); // true, once
var isItAssigned = (x === 'bar'); // true
这个成语对于使用不可变.js检查不变性突变很方便,即
if (myMap !== (myMap = myMap.set('x', 2))) { changed.emit(); }
IIRC 如果突变没有导致实际更改,则不可变映射实现将返回自身。
除非对这有多丑陋/"聪明"进行潜在分析,否则我很好奇这是否是 ES5+ 中明确定义的行为。似乎依赖于从左到右的评估,因为相同的结构表示为
var thisWontWork = ((x = y) !== x);
永远不会评估到true
.
适用于铬 (40(。
是的,评估顺序在 Ecmascript § 11.9.4 中有很好的定义。 x !== (x = y)
将在将 y
的值分配给 x
之前获取 x
的值。
相关文章:
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 用于检查数组中是否存在元素的javascript自定义方法
- 是否排除节点中错误堆栈的第一行?/节点中的自定义错误类型
- 如何在JavaScript中检查变量是否为null和/或未定义
- 检查对象的所有属性是否未定义
- 如何查看变量名称是否已在Javascript中定义
- 注册后是否可以定义HTML5自定义元素中的生命周期回调
- 是否可以替换或自定义getUserMedia提示
- 是否可以在定义对象时访问对象值
- 是否可以在AlloyUI中拥有自定义连接器
- 是否可以通过Primefaces 3.3的自定义对话框取消Ajax请求
- AngularJs 检查是否未定义和空的最佳实践
- 如何检查服务器是否返回未定义然后忽略它
- 我是否必须在每个文件中引用 TypeScript 定义
- 如何确定控件/插件是否从 CRM 2011 中功能区上的自定义按钮触发
- 检查未定义是否不起作用
- 这些JavaScript包含定义是否有区别
- angular是如何定义是否应该使用某个编译器的?
- 检查变量(定义)是否在JavaScript中不起作用
- Raphael / SVG路径定义是否总是以'M'开头?(如果不是,这样的路径的原点是否总是0,0?)