JS中比较

article/2025/4/17 15:26:35

一、类型介绍

1、原始值

包含:undefined、null、布尔值、数字和字符串

2、对象

包含:数组和函数

3、包装对象

String、Number、Boolean

// 一个字符串、数字和布尔值
let s = "test", n = 1, b = true;  
let S = new String(s);       // 一个字符串对象
let N = new Number(n);       // 一个数值对象
let B = new Boolean(b);      // 一个布尔值对象
// S, N, B即为包装对象

二、类型间转换规则

1、js类型转换:
在这里插入图片描述2、对象转换为原始值

  • 对象到布尔值的转换:所有的对象(包括数组和函数)都转换为true。也含包装对象,如 new Boolean(false)是一个对象,它将转换为true。
  • 对象到字符串:一般调用对象 toString() 方法,没有则调用valueOf()方法,否则抛出异常。
  • 对象转数字:一般先调用valueOf()方法,没有则调用toString()方法,否则抛出异常。如果返回的原始值不为数字,则有需要会转换成数字。

三、比较原则

  • 原始值的比较是值得比较:只有在它们的值相等时它们才相等。
  • 对象比较是引用的比较,不是值得比较。

四、相等比较

1、严格相等运算符 “===” 首先计算其操作数的值,然后比较这两个值,比较过程没有任何类型转换:

  • 如果两个值类型不相同,则它们不相等。
  • 如果两个值都是null或者都是undefined,则它们不相等(实测相等)。
  • 如果两个值都是布尔值true或都是布尔值false,则它们相等。
  • 如果其中一个值是NaN,或者两个值都是NaN,则它们不相等。NaN和其他任何值都是不相等的,包括它本身!
  • 如果两个值为数字且数值相等,则它们相等。如果一个值为0,另一个值为-0,则它们同样相等。
  • 如果两个值为字符串,且所含的对应位上的16位数完全相等,则它们相等。如果它们的长度或内容不同,则它们不等。
  • 如果两个引用值指向同一个对象、数组或函数,则它们是相等的。如果指向不同的对象,则它们是不等的,尽管两个对象具有完全一样的属性。
    在这里插入图片描述

2、相等运算符 “==” 和恒等运算符类似,但相等运算符的比较并不严格。如果两个操作数不是同一类型,那么相等运算符会尝试进行一些类型转换,然后进行比较:

  • 如果两个操作数的类型相同,则和上文所述的严格相等的比较规则一样。如果严格相等,那么比较结果为相等。如果它们不严格相等,则比较结果为不相等。
  • 如果两个操作数类型不同,“==” 相等操作符也可能会认为它们相等。检测相等将会遵守如下规则和类型转换:
  1. 如果一个值是null,另一个是undefined,则它们相等。
  2. 如果一个值是数字,另一个是字符串,则将字符串转换为数字,然后使用转换后的值进行比较。
  3. 如果其中一个值是true,则将其转换为1再进行比较。
  4. 如果一个值是对象,另一个值是数字或字符串,则将对象转换为原始值,然后再进行比较。
  5. 其他不同类型之间的比较均不相等。

在这里插入图片描述

五、比较操作符

比较操作符的操作数可能是任意类型。然而,只有数字和字符串才能真正执行比较操作,因此那些不是数字和字符串的操作数都将进行类型转换,类型转换的规则如下:

  • 如果操作数为对象,则先把对象转换为原始值。调用valueOf()或者toString()方法。
  • 在对象转换为原始值之后,如果两个数都是字符串,那么将依照字母表的顺序对两个字符串进行比较。
  • 在对象转换为原始值之后,如果至少有一个操作数不是字符串,那么两个操作数都将转换为数字进行数值比较。

六、总结

1、基本类型比较,按值比较

  • 恒等"===",类型相同,然后值比较
  • 相等"==",类型可以不同,值转换比较

2、对象与对象比较

  • 恒等"=" 和 相等 "" , 指向内存空间相同则相等
  • 比较操作, 先转换成基本类型,然后比较,如果转换后有一个操作数不是字符串,则转换成数字进行比较

3、对象与基本类型比较

  • 恒等"===" 因为不指向相同的内存空间,则不会相等。
  • 相等 “==” 对象先转换成基本类型,然后比较,如果转换后有一个操作数不是字符串,则转换成数字进行比较
  • 比较操作, 先转换成基本类型,然后比较,如果转换后有一个操作数不是字符串,则转换成数字进行比较

1、参考《JavaScript权威指南》
2、JS中不同类型作比较的规律 (比较运算符)


http://chatgpt.dhexx.cn/article/pKiFiHWK.shtml

相关文章

【3D游戏建模全流程教学】使用3dmax制作教堂场景

本文分享了使用3dmax制作教堂场景的流程,并解释V-Ray的渲染过程。 01场景制作 在网站中收集许多的参考图像,然后使用平面、立方体和圆柱体等基本形状来制作场景。再制作基础照明以了解场景的构图和总体外观,从视口制作预览动画。 下一步是创…

3D建模场景有哪些物理特性?

由于3D建模场景的材质渲染是基于物理的特性转化而来,3D建模场景的导入引擎也为此引入具有物理单位的照明参数,3D建模场景引擎使用基于物理的渲染和遵循真实光线的传播,以全局照明为目的,而3D建模场景工程师需要使用这些功能&#…

OpenGL,WebGL基于HTML5/WebGL的建模及构建3D场景

一、OpenGL和WebGL WebGL基于OpenGL ES,它缺少常规OpenGL具有的许多功能,例如仅支持顶点和片段着色器。OpenGL具有WebGL所不具备的功能,例如几何体着色器,镶嵌细分着色器和计算着色。在PC端web应用中,前端的webgl是通过js语句调用的是OpenGL部分接口,在移动设备是调用OpenGL ES…

3d游戏场景建模设计师需要学哪些软件?

一 跳出软件层面理解软件,我们要牵着软件的鼻子走。 关于3D建模软件有哪些,这个问题,我在下面会详细的讲解,一堆,会看的你眼疼,这个问题不着急,淡定。首先我需要讲的是跳出软件这个层面来理解软件,放大我们的格局来学习软件,只有理解了更大的层面,才能更好的去知道怎…

用3Ds Max做三维场景建模

今天的3ds max教程是三维场景建模中关于对场景进行布局和建模,了解如何使用3ds Max和Marmoset创建一个世界末日的立体模型,这是建模技能的完美组合展示。 场景布局和建模. 本教程将指导您完成创建diorama的过程,您将能够在Web浏览器中进行交互。本教程将分为三个部分。我将…

3D 游戏角色建模和场景建模哪个好

建模师,依据原画师的设计稿件进行三维立体模型的创造,对应原画设计中的角色设计、场景设计、道具设计,建模工作也有角色建模、场景建模、道具建模之分。很多人就问了:“游戏角色建模和场景建模哪个好?学哪个赚钱多&…

动画设计与制作——3D Max场景建模《我的家》V-Ray 4.1

《动画设计与制作》 下载源文件资源包(文章结尾有说明): https://download.csdn.net/download/weixin_48388330/76484706 所使用的工具软件及环境: 3ds Max 2020、V-Ray 4.1 一、实验目的: 熟练使用3ds Max 2020&a…

3D场景建模,次世代游戏模型怎么被做出来?

与传统游戏相比,次世代游戏以精简的面数表达出高精度模型效果,各种材质和纹理贴图根据写实效果展示,注重质感表现。 次世代游戏模型怎么被做出来? 次世代游戏角色制作通过颜色贴图、高光贴图、法线贴图、自发光贴图多种贴图丰富…

游戏行业中3D设计都有哪些职位?3D场景建模该如何学习?

游戏行业中的3D美术设计呢,分为场景设计,以及角色设计。 3D场景建模师 场景则是游戏中的环境、机械、道具等死物。场景开始对美术的要求没有那么高,只要熟练运用3D软件就行了。 逐步掌握游戏场景元素设计理念,不同风格游戏的制…

有哪些知识是学习3D场景建模必备的?

1.场景建模的知识点 视角范围:视角范围是玩家在游戏中所能看到的游戏场景的范围,视角是随着玩家的移动不停变换的,基于这点才有了场景分块的必要性。 场景分块:在游戏中不管你的视角在哪个位置,可能你的视角方向上只能…

游戏建模:模型场景制作过程分享

创建一个有趣、精细的3D艺术模型本身也是有挑战性的。把它们放在一起,为讲述故事的3D电影组建一个逼真的环境是更困难的工作。 如果目标是这个环境中的一个单独静态图像,那么2D 插画将会是一个更具成本效益、更好效果地替代3D渲染的选择。但是,3D领域的过人之处是通过动画将…

3d场景建模什么水平能找到工作?次世代游戏场景建模需要学多久

3d建模学多久这个问题不是很好回答,谁才知道你的实力怎么样,努力的态度怎么样,如果你三天打鱼两天晒网,我估计一万年也学不会。如果你全力以赴认真的学,五六个月就能很好的玩转3D建模,当然如果你想达到大神…

如何自学3D游戏场景建模和设计?

游戏行业毕竟是靠作品说话的,想做场景美术自然就得把场景“搭”得足够好,当然,这里说的“搭”指的是包括场景建模、材质、特效、渲染等流程在内的整个场景美术制作流程,场景美术这个范畴很宽泛的。 这个**“搭得好”**的标准究竟…

3D场景建模学习必备的基础知识

1.场景建模的知识点 视角范围:视角范围是玩家在游戏中所能看到的游戏场景的范围,视角是随着玩家的移动不停变换的,基于这点才有了场景分块的必要性。 场景分块:在游戏中不管你的视角在哪个位置,可能你的视角方向上只能…

3D建模场景怎么做?

在开始做3d场景之前,我绘制了一些草图。选好需要的草图后(图01),我用3ds max从标准几何体开始制作模型,还使用了像lathe,bevel以及unwrap uvw这类的基本修改器。 用不同的参数值进行复制(图02)。为了完成这个项目,一些额外的模型也是必须的(图03)。 图01 图02 图…

3D场景的制作步骤

2.4 3D场景的制作步骤 1. 场景建模的使用目的 使用地形生成编辑器在模拟自然地形效果上有很大的优势,但是也有局限性。在表现比较规整的地形,比如一现代化城市,初具规模的小镇,地下宫殿等等就存在这样的局限。因为使用地形编辑…

3D游戏建模:3dmax对场景进行布局和建模

今天的3dmax教程是关于对场景进行布局和建模,了解如何使用3ds Max和Marmoset创建一个世界末日的立体模型,这是建模技能的完美组合展示。 第一部分 - 场景布局和建模… 本教程将指导您完成创建diorama的过程,您将能够在Web浏览器中进行交互。…

TPAMI 2022|基于最优传输理论的无监督图像重建学习

作者丨王炜 来源丨上海交通大学类脑智能应用与技术中心 编辑丨极市平台 论文地址:https://ieeexplore.ieee.org/document/9763342 开源地址代码:https://github.com/wangweiSJTU/OTUR 图像重建是底层计算机视觉中的一个基本问题,对于后续的许…

LDCT图像重建论文——Eformer: Edge Enhancement based Transformer for Medical Image Denoising

Eformer是进行低剂量CT图像重建的工作,它第一次将Transformer用在医学图像去噪上,值得一读。 知乎同名账号同步发布。 目录 一、架构和贡献二、主要细节2.1,Sobel Convolution2.2, 下采样和上采样2.3,损失函数 三、实验 一、架构…

图像重建中常用的滤波器的设计

在医学图像重建的过程中,如果不使用滤波器,重建出来的图像与使用滤波器重建出来的图像的质量相差甚远,效果如下图所示: 由上图我们可以看出,使用滤波器能极大的提高重建图像的质量,其中最为常见的就是RL滤波…