当前位置: 首页 > 编程日记 > 正文

同样在JavaScript中

ES6有三个内置决定一些设施x和一些y是“相同的”。 它们是:平等或“双等于”(==),严格平等或平等“三重”(===),Object.is。 (注意,Object.is在ES6补充道。 等于两倍和三倍等于存在ES6之前,和他们的行为没有改变。)

概述

演示,下面是三个同样使用的比较:

x = = y
x = = = y
Object(x, y)

短暂、双等于将执行类型转换当比较两件事;三等于将做同样的比较没有类型转换(通过简单总是返回false如果不同类型);Object.is行为一样等于三倍,但与特殊处理NaN-0+0据说,最后两个不相同的,Object.is(NaN, NaN)true。 (比较NaNNaNordinarily-i.e。 ,使用等于两倍或三倍equals-evaluatesfalse,因为IEEE 754这么说)。

注意区分这些都有与原语的处理;他们比较参数是否在概念上类似的结构。 对于任何销售对象xy具有相同的结构,但不同的对象本身,所有上述形式将评估false

例如:

让 x = { value: 17 }; 让 y = { value: 17 }; console日志(Object(x, y));/ /错误;console日志(x = = = y); / /错误console日志(x = = y); / /错误

抽象的平等,严格的平等,和相同的值

由ES5的比较==描述的是算法部分11.9.3、抽象的平等。 的===比较是11.9.6、严格平等算法。 (去看看这些。 他们短暂的和可读的。 提示:先读严格平等算法)。 ES5还描述了,9.12节,SameValue算法JS引擎内部使用。 它很大程度上是一样的严格平等算法,除了11.9.6.4和9.12.4不同处理Number年代。ES6仅仅提出公开该算法通过Object.is

与平等的两倍和三倍,我们可以看到,除了在11.9.6.1前期做类型检查,严格平等算法抽象平等的一个子集算法,因为11.9.6.2-7对应11.9.3.1.a-f。

模型为理解平等比较?

ES6之前,你可能会说等于两倍和三倍等于,一个是“增强”的其他版本。 比如,有人可能会说,双等于是三重的扩展版本等于,因为前者后者所做的每一件事情,但在其操作数类型转换。 例如,6 == "6"。 (或者,有人可能会说,双等于基线,和三倍等于一个增强版本,因为它需要两个操作数是相同的类型,因此它添加了一个额外的约束。 哪一个是更好的模型来理解取决于你如何看待事情。)

然而,这种思维方式对内置的相同运营商不是一个模型,可以延伸到允许ES6的地方Object.is在这个“谱”。Object.is不是简单的“宽松”要比双等于或比三等于“严格”,也不适合介于两者之间(即。 ,既严格等于两倍多,但比三等于宽松)。 我们可以看到下面从千篇一律的比较表,这是由于Object.is处理NaN。 注意,如果Object.is(NaN, NaN)评估,false,我们可能说它适合宽松/严格光谱作为一个甚至更严格的三重平等形式,区分-0+0。 的NaN然而,处理意味着这是不真实的。 不幸的是,Object.is仅仅是想到的特定的特征,而不是其松动或严格相等运算符。

千篇一律的比较
xy=====Object.is
undefinedundefinedtruetruetrue
nullnulltruetruetrue
truetruetruetruetrue
falsefalsetruetruetrue
"foo""foo"truetruetrue
{ foo: "bar" }xtruetruetrue
00truetruetrue
+0-0truetruefalse
0falsetruefalsefalse
""falsetruefalsefalse
""0truefalsefalse
"0"0truefalsefalse
"17"17truefalsefalse
[1,2]"1,2"truefalsefalse
new String("foo")"foo"truefalsefalse
nullundefinedtruefalsefalse
nullfalsefalsefalsefalse
undefinedfalsefalsefalsefalse
{ foo: "bar" }{ foo: "bar" }falsefalsefalse
new String("foo")new String("foo")falsefalsefalse
0nullfalsefalsefalse
0NaNfalsefalsefalse
"foo"NaNfalsefalsefalse
NaNNaNfalsefalsetrue

什么时候使用Object.is与三等于

除了对待的方式NaN一般来说,只有时间Object.is对零的特殊行为可能是感兴趣的在追求某些元编程方案,特别是关于属性描述符当你的工作是最理想的镜子的一些特点Object.defineProperty。 如果你的用例不需要这个,建议避免Object.is和使用===来代替。 即使你的需求涉及到比较两个NaN值评估true代价,通常更容易处理NaN检查(使用isNaN方法可以从以前版本的ECMAScript)比如何计算可能会影响周围的标志任何零你遇到的比较。

这里有一个不彻底的内置方法列表和运营商,可能导致之间的区别-0+0体现在你的代码:

- (unary negation)

很明显,否定0生产-0。 但表达的抽象可以引起-0当你没有意识到它的蠕变。 例如,考虑:

让 stoppingForce = obj。mass * - - - - - -obj。velocity

如果obj.velocity0(或计算0),一个-0介绍了在那个地方,传播到吗stoppingForce

Math.atan2Math.ceilMath.powMath.round
它是可能的-0是引入一个表达式的返回值这些方法在某些情况下,即使没有-0存在的参数。 如。 ,使用Math.pow提高-无限任何负面的力量,奇怪的指数评估-0。 指个人的文档的方法。
Math.floorMath.maxMath.minMath.sinMath.sqrtMath.tan
可以得到一个-0返回值的这些方法在某些情况下-0存在的参数。 例如,Math.min(-0, +0)评定,-0。 指个人的文档的方法。
~< <> >
这些运营商内部使用ToInt32算法。 由于只有一个为0表示内部32位整数类型,-0不会生存往返后逆操作。 如。 ,两个Object.is(~~(-0), -0)Object.is(-0 << 2 >> 2, -0)评估,false

依靠Object.is当零的signedness不考虑危险。 当然,当目的是区分-0+0,它到底是什么。

转自百度贴吧

转载于:https://www.cnblogs.com/Matedo/p/4009270.html

相关文章:

5-flutter 布局和列表

布局和列表 类型作用特点Container只有一个子 Widget。默认充满&#xff0c;包含了padding、margin、color、宽高、decoration 等配置。Padding只有一个子 Widget。只用于设置Padding&#xff0c;常用于嵌套child&#xff0c;给child设置padding。Center只有一个子 Widget。只…

shell awk实战

一、文本处理 1、按行提取关键字频次&#xff08;如取第5列&#xff09; awk BEGIN{FS"|"} {a[$5]1;} END {for(i in a) print i ":" a[i];} OPT.ForumLogicNewServer_action_20161107.log | sort -nrk 2 -t : 2、日志用户每分钟访问量统计 这里我们统计日…

pix怎么抚养另一只猫_在工作和抚养两个孩子的同时,我如何在一年内获得第二学位并获得了5个开发人员认证...

pix怎么抚养另一只猫“The standard pace is for chumps. The system is designed so anyone can keep up. If you’re more driven than ‘just anyone’ — you can do so much more than anyone expects. And this applies to ALL of life — not just school.” — Derek S…

Wireshark网络抓包(三)——网络协议

一、ARP协议 ARP&#xff08;Address Resolution Protocol&#xff09;地址解析协议&#xff0c;将IP地址解析成MAC地址。 IP地址在OSI模型第三层&#xff0c;MAC地址在OSI第二层&#xff0c;彼此不直接通信&#xff1b; 在通过以太网发生IP数据包时&#xff0c;先封装第三层&a…

实现Java中的ArrayList

最近深受轮子哥影响&#xff0c;觉得造一些轮子应该会对自己的技术功底有一定的帮助&#xff0c;就决定先从简单的容器开始实现。废话不多说&#xff0c;就先实现一个Java中的ArrayList。 ArrayList是我们在Java中使用非常多的一个类&#xff0c;它是顺序表的数组实现&#xff…

6-flutter 状态管理

1 StatelessWidget 不需要状态改变的widget,它没有要管理的内部状态。 Text&#xff0c;CircleAvator 都是其子类 其传递的参数别final 修饰&#xff0c;不可变的 无状态的widget build 方法在以下三种情况下进行调用 当widget 插入到数中去当widget 父级更改配置的时候当…

大二上学数据结构和操作系统_毕业后的工作比上学要重要得多。 这是数据。...

大二上学数据结构和操作系统by Aline Lerner通过艾琳勒纳(Aline Lerner) 毕业后的工作比上学要重要得多。 这是数据。 (What you do after you graduate matters way more than where you went to school. Here’s the data.) The first blog post I published that got any r…

关于C#中编译器保证变量必须初始化规则猜想

现在两种情况&#xff1a; 第一种情况&#xff1a; using System; namespace Wrox {public class Program{static void Main(string[] args){int index; if(true){ index 100; } Console.WriteLine(index); Cons…

Bootstrap table表格

Bootstrap table 使用类 Class"table" 既可让table美化样式 table 相关的Class 隔行换色 &#xff1a; table-striped 鼠标悬停效果&#xff1a; table-hover 表格的边框 : table-bordered 垂直居中 : vertical-align 表头颜色&#xff1a;c…

flutter报错Could not connect to lockdownd, error code -

关于 flutter 报错信息解决方案 第一步&#xff1a; cmdshiftg 前往 /var/db 文件夹&#xff0c;找到lockdown文件夹&#xff0c;修改读写权限 第二步 &#xff1a; 打开命令行,依次执行 brew update brew uninstall --ignore-dependencies libimobiledevice brew uninstall…

k8s aws 部署_如何在短短30分钟内使用CircleCI设置到AWS S3的持续部署

k8s aws 部署by Adam Watt通过亚当瓦特 如何在短短30分钟内使用CircleCI设置到AWS S3的持续部署 (How to setup Continuous Deployment to AWS S3 using CircleCI in just 30 minutes) Continuous Deployment might seem complicated at first, but don’t be intimidated. In…

SharePoint 2010 单点登录

SharePoint2010单点登录 1.进入管理中心》应用程序管理 2.找到 Secure Store Service 应用程序代理 3.然后就是新建了 5.输入网站集管理员 6.这个时候SharePoint就知道你需要给OA这个系统做单点登录了。 7.下一步就是我们要把我们进OA系统的帐号密码告诉SharePoint&#xff0c…

Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream

Java IO流学习总结三&#xff1a;缓冲流-BufferedInputStream、BufferedOutputStream 转载请标明出处&#xff1a;http://blog.csdn.net/zhaoyanjun6/article/details/54894451 本文出自【赵彦军的博客】 InputStream |__FilterInputStream|__BufferedInputStream 首先抛出一个…

7-flutter Navigator 和Route

Route 和 Navigator 用于页面之间的跳转 一 Navigator 的 push 和 pop 用于页面之间的跳转 创建MaterialApp时可以指定routes参数&#xff0c;该参数是一个映射路由名称和构造器的Map 跳转的时候 使用 push 跳回的时候使用 pop import package:flutter/cupertino.dart; im…

小规模网络数据公开数据_大规模的在线公开课程曾经是100%免费的。 但是他们没有那样做。...

小规模网络数据公开数据I took one of the first Massive Open Online Courses (MOOCs) in 2011. Back then, everything was 100% free: the videos, the assignments, and the certificates. But in 2017, you can’t find this sort of free learning experience anymore.我…

swift -charts框架雷达图

参考资料 import UIKit import Chartsclass ViewController: UIViewController {let activities ["力量", "敏捷", "生命", "智力", "魔法"]override func viewDidLoad() {super.viewDidLoad()// Do any additional setup…

vector容器总结.xml

1 清空所有元素m_itemVector.clear(); 2 遍历vector<ITEM_CHECK>::iterator iterm_itemVector.begin(); for(i0;iter!m_itemVector.end();iter,i) { if(iter->flag-1) { break; } iter->flag1; } vector<ITEM_CHECK>::iterator iterm_itemVector.b…

Syncthing源码解析 - 第三方库

1&#xff0c;AudriusButkevicius/cli 网址&#xff1a;https://github.com/AudriusButkevicius/cli 2&#xff0c;bkaradzic/go-lz4 网址&#xff1a;https://github.com/bkaradzic/go-lz4 3&#xff0c;calmh 备注&#xff1a;这位是Syncthing项目创立者和最主要的开发者&…

安全工程师2017年真题_以下是2017年全球软件工程师的平均薪水

安全工程师2017年真题And here are those same salaries adjusted to San Francisco’s cost of living:以下是根据旧金山的生活费用调整后的相同工资&#xff1a; As you can see, cost of living is an important consideration. Also, you don’t need to move to San Fran…

测试思想 什么是软件测试(摘录)

什么是软件测试(摘录) by:授客 QQ&#xff1a;1033553122 IEEE 标准的定义:使用人工或自动的手段来运行或测定某个系统的过程&#xff0c;其目的在于检验;它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。对软件测试还有一些不同的定义。 G.J.Myers给出的定义:“程…

8-flutter 异步和线程

线程和异步的UI 1 异步的使用 Dart 有一个单线程执行模型&#xff0c;支持Isolate&#xff08;一种在另外一种线程运行dart的方法&#xff09;,一个事件循环和异步编程。 可以使用async / await 来做网络请求不会挂起UI 使用http 导入 import ‘dart:io’; import ‘dart:c…

前端页面紫红色_谷歌正在开发一种神秘的新型移动操作系统,称为紫红色

前端页面紫红色Google seems to be building a replacement for Android called Fuchsia. Yesterday, they revealed what their new Armadillo user interface looks like (see photo above, courtesy of Ars Technica).谷歌似乎正在建立一个名为Fuchsia的 Android替代产品。 …

iOS UIButton 文字图片上下左右布局

例如文字在左 图片在右,iOS 9 之后一句话搞定 backBtn.semanticContentAttribute UISemanticContentAttributeForceRightToLeft;按钮标题居左实现 dateBtn.contentHorizontalAlignment UIControlContentHorizontalAlignmentLeft; dateBtn.contentEdgeInsets UIEdgeInsetsMak…

linux xampp eclipse xdebug 无法进入断点

一、xampp 版本 1.8.3-5 xampp安装后会自动集成xdebug,目录一般为 /opt/lampp/lib/php/extensions/***-debug-***目录 关于php 与php.ini路径 php程序路径为&#xff1a;/opt/lampp/bin/ php.ini配置文件路径为&#xff1a;/opt/lampp/etc/ 1、配置文件一般在/opt/lampp/etc/ph…

sliva数据库简介--转载

sliva rRNA数据库&#xff08;http://www.arb-silva.de/&#xff09;用来检查和比对RNA序列&#xff0c;既可以针对16S/18S,SSU&#xff0c;也可以针对23S/28S, LSU&#xff0c;包括了Bacteria, Archaea and Eukarya。同时也是ARB的官方指定数据库。 LSU: Large subunit (23S/2…

haproxy ssl_我们如何微调HAProxy以实现2,000,000个并发SSL连接

haproxy sslby Sachin Malhotra由Sachin Malhotra 我们如何微调HAProxy以实现2,000,000个并发SSL连接 (How we fine-tuned HAProxy to achieve 2,000,000 concurrent SSL connections) If you look at the above screenshot closely, you’ll find two important pieces of in…

OC文件操作(1)

1.文件的浅度遍历与深度遍历&#xff1a; //NSFileManager * fm [[NSFileManager alloc]init];//创建文件管理器 //第一步创建一个文件管理器 NSError * error nil; //显示路径下的内容,作用类似于ls -a指令 //返回值是把目录下的内容放到NSArray中 //浅度遍历 NSFileManager …

10-flutter 使用http包请求和网络指示器

使用http package 进行网络请求操作 1 安装步骤 Step1 在pubspec.yaml 文件中添加依赖 dependencies:http: ^0.12.01Step2 flutter packages getStep3 导入头文件 import ‘package:http/http.dart’ as http; 2 使用 var responseBody;http.Response response await http.…

使用nat方式解决虚拟机联网问题

本文全文参考&#xff1a;http://jingyan.baidu.com/album/4e5b3e1957979d91901e24f1.html?picindex1&#xff0c;谢谢 对于很多的linux初学者来说&#xff0c;最开始学习linux时通常是在虚拟机上进行的&#xff0c;然而对于新手来说虚拟机联网会对他们来说是比较困难的。…

老年痴呆 数字化_设计老年人愉快数字体验的5条原则

老年痴呆 数字化by Kaye Mao毛凯(Kaye Mao) 设计老年人愉快数字体验的5条原则 (5 Principles for Designing Delightful Digital Experiences for Seniors) When we got my grandfather his first smart phone, he was thrilled. He had heard all about the wonders of video…