`

5、运算

阅读更多
  • delete

delete 运算符删除对以前定义的对象属性或方法的引用。例如:

var o = new Object;
o.name = "David";
alert(o.name);	//输出 "David"
delete o.name;
alert(o.name);	//输出 "undefined"

 

在这个例子中,删除了 name 属性,意味着强制解除对它的引用,将其设置为 undefined(即创建的未初始化的变量的值)。

delete 运算符不能删除开发者未定义的属性和方法。例如,下面的代码将引发错误:

delete o.toString; 
  • void

void 运算符使任何值返回都为undefined。该运算符通常用于避免输出不应该输出的值,例如,从 HTML 的 <a> 元素调用 JavaScript 函数时。要正确做到这一点,函数不能返回有效值,否则浏览器将清空页面,只显示函数的结果。例如:

<a href="javascript:window.open('about:blank')">Click me</a>

 

如果把这行代码放入 HTML 页面,点击其中的链接,即可看到屏幕上显示 "[object]"。这是因为 window.open() 方法返回了新打开的窗口的引用。然后该对象将被转换成要显示的字符串。要避免这种效果,可以用 void 运算符调用 window.open() 函数:

<a href="javascript:void(window.open('about:blank'))">Click me</a>

 

这使 window.open() 调用返回 undefined,它不是有效值,不会显示在浏览器窗口中。

  •  ECMAScript 位运算符 


ECMAScript 整数有两种类型,即有符号整数(允许用正数和负数)和无符号整数(只允许用正数)。在 ECMAScript 中,所有整数字面量默认都是有符号整数。
有符号整数使用 31 位表示整数的数值,用第 32 位表示整数的符号,0 表示正数,1 表示负数。数值范围从 -2147483648 到 2147483647。

var iNum = 18; 
alert(iNum.toString(2)); //输出 "10010" 

 
这段代码只输出 "10010",而不是 18 的 32 位表示。其他的数位并不重要,因为仅使用前 5 位即可确定这个十进制数值。
把负整数转换成二进制字符串后,ECMAScript 并不以二进制补码的形式显示,而是用数字绝对值的标准二进制代码前面加负号的形式输出。例如:

var iNum = -18; 
alert(iNum.toString(2)); //输出 "-10010 

 
注意:所有整数字面量都默认存储为有符号整数只有 ECMAScript 的位运算符才能创建无符号整数

  • 位运算 NOT(~)

位运算 NOT 是三步的处理过程:
1. 把运算数转换成 32 位数字
2. 把二进制数转换成它的二进制反码
3. 把二进制数转换成浮点数

var iNum1 = 25; //25 等于 00000000000000000000000000011001 
var iNum2 = ~iNum1; //转换为 11111111111111111111111111100110 
alert(iNum2); //输出 "-26" 
  •  逻辑 NOT 运算符(!)

与逻辑 OR 和逻辑 AND 运算符不同的是,逻辑 NOT 运算符返回的一定是 Boolean 值
逻辑 NOT 运算符的行为如下:
• 如果运算数是对象,返回 false
• 如果运算数是数字 0,返回 true
• 如果运算数是 0 以外的任何数字,返回 false
• 如果运算数是 null,返回 true
• 如果运算数是 NaN,返回 true
• 如果运算数是 undefined,发生错误

  • 逻辑 AND 运算符(&&)

如果某个运算数不是原始的 Boolean 型值,逻辑 AND 运算并不一定返回 Boolean 值
• 如果一个运算数是对象,另一个是 Boolean 值,返回该对象。
• 如果两个运算数都是对象,返回第二个对象。
• 如果某个运算数是 null,返回 null。
• 如果某个运算数是 NaN,返回 NaN。
• 如果某个运算数是 undefined,发生错误。
注:如果第一个运算数是 false,那么无论第二个运算数的值是什么,结果都不可能等于 true。

  • 逻辑 OR 运算符(||)

与逻辑 AND 运算符相似,如果某个运算数不是 Boolean 值,逻辑 OR 运算并不一定返回 Boolean 值
• 如果一个运算数是对象,另一个是 Boolean 值,返回该对象。
• 如果两个运算数都是对象,返回第一个对象。
• 如果某个运算数是 null,返回 null。
• 如果某个运算数是 NaN,返回 NaN。
• 如果某个运算数是 undefined,发生错误。
注:如果第一个运算数值为 true,就不再计算第二个运算数。

  • 乘法运算符(*)

在处理特殊值时,ECMAScript 中的乘法还有一些特殊行为:
• 如果结果太大或太小,那么生成的结果是 Infinity 或 -Infinity。
• 如果某个运算数是 NaN,结果为 NaN。
• Infinity 乘以 0,结果为 NaN。
• Infinity 乘以 0 以外的任何数字,结果为 Infinity 或 -Infinity。
• Infinity 乘以 Infinity,结果为 Infinity。

  • 除法运算符(/)

处理特殊值时,除法运算符也有一些特殊行为:
• 如果结果太大或太小,那么生成的结果是 Infinity 或 -Infinity。
• 如果某个运算数是 NaN,结果为 NaN。
• Infinity 被 Infinity 除,结果为 NaN。
• Infinity 被任何数字除,结果为 Infinity。
• 0 除一个任何非无穷大的数字,结果为 NaN。
• Infinity 被 0 以外的任何数字除,结果为 Infinity 或 -Infinity。

 

  • 取模运算符(%)

于特殊值,取模运算符也有特殊的行为:
• 如果被除数是 Infinity,或除数是 0,结果为 NaN。
• Infinity 被 Infinity 除,结果为 NaN。
• 如果除数是无穷大的数,结果为被除数。
• 如果被除数为 0,结果为 0。

  •  加法运算符(+)

处理特殊值时,ECMAScript 中的加法也有一些特殊行为:
• 某个运算数是 NaN,那么结果为 NaN。
• -Infinity 加 -Infinity,结果为 -Infinity。
• Infinity 加 -Infinity,结果为 NaN。
• +0 加 +0,结果为 +0。
• -0 加 +0,结果为 +0。
• -0 加 -0,结果为 -0。


不过,如果某个运算数是字符串,那么采用下列规则:
• 如果两个运算数都是字符串,把第二个字符串连接到第一个上。
• 如果只有一个运算数是字符串,把另一个运算数转换成字符串,结果是两个字符串连接成的字符串。

减法运算符(-)

处理特殊值时,减法运算符也有一些特殊行为:
• 某个运算数是 NaN,那么结果为 NaN。
• -Infinity 减 Infinity,结果为 NaN。
• -Infinity 减 -Infinity,结果为 NaN。
• Infinity 减 -Infinity,结果为 Infinity。
• -Infinity 减 Infinity,结果为 -Infinity。
• +0 减 +0,结果为 +0。
• -0 减 -0,结果为 -0。
• +0 减 -0,结果为 +0。
• 某个运算符不是数字,那么结果为 NaN。

  • 关系运算符

任何包含 NaN 的关系运算符都要返回 false:

var bResult = "a" < 3; 
alert(bResult);//false
  • 如果一个运算数是 Boolean 值,在比较性之前,把它转换成数字值。false 转换成 0,true 为 1(true != 2)。
  • 如果一个运算数是 Boolean 值,一个是对象,Boolean 转整型,对象先转字符串,再转数字,最后进行比较。
  • 如果一个运算数是字符串,另一个是数字,在比较之前,要尝试把字符串转换成数字。
  • 如果一个运算数是对象,另一个是字符串,在比较之前,要尝试把对象转换成字符串。
  • 如果一个运算数是对象,另一个是数字,在比较之前,要尝试把对象转换成数字。
    •  等性运算符

     ECMAScript 提供了两套等性运算符:等号和非等号用于处理原始值,全等号和非全等号用于处理对象。

    等号和非等号(==、!=)

    这两个运算符都会进行类型转换。执行类型转换的规则如下:

    • 如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1(true != 2)。
    • 如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
    • 如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
    • 如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。

    在比较时,该运算符还遵守下列规则:

    • 值 null 和 undefined 相等。
    • 在检查相等性时,不能把 null 和 undefined 转换成其他值。
    • 如果某个运算数是 NaN,等号将返回 false,非等号将返回 true。
    • 如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一对象,那么等号返回 true,否则两个运算数不等。

    注: 即使两个数都是 NaN,等号仍然返回 false,因为根据规则,NaN 不等于 NaN。

    全等号和非全等号(===、!==)

    等号和非等号的同类运算符是全等号和非全等号。这两个运算符所做的与等号和非等号相同,只是它们在检查相等性前,不执行类型转换

    全等号由三个等号表示(===),只有在无需类型转换运算数就相等的情况下,才返回 true

    var sNum = "66";
    var iNum = 66;
    alert(sNum == iNum);	//输出 "true"
    alert(sNum === iNum);	//输出 "false"

     非全等号由感叹号加两个等号(!==)表示,只有在无需类型转换运算数不相等的情况下,才返回 true

    var sNum = "66";
    var iNum = 66;
    alert(sNum != iNum);	//输出 "false"
    alert(sNum !== iNum);	//输出 "true"

     这里,第一个 alert 使用非等号,把字符串 "66" 转换成数字 66,使得它与第二个运算数 66 相等。因此,计算结果为 "false",因为两个运算数是相等的。第二个 alert 使用的非全等号。该运算是在问:"sNum" 与 "iNum" 不同吗?这个问题的答案是:是的(true),因为 sNum 是字符串,而 iNum 是数字,它们当然不同。

    分享到:
    评论

    相关推荐

      简单的计算器 用c#写的 实现了简单的混合运算

      6. 遇到"/",将栈顶的"2"和"5"弹出,进行2/5运算,结果0.4入栈。 7. 最后,栈中只剩下一个元素0.4,这就是最终结果。 在实际编码过程中,我们还需要处理一些特殊情况,比如负数、小数、空格以及错误输入等。此外,...

      运算与运算符.md

      运算与运算符.md

      运算器_华科计算机组成原理运算器实验_运算器_

      5. **操作码和操作数**:在执行指令时,操作码指示了要执行的运算类型,而操作数则是参与运算的数据。 6. **数据类型和位宽**:运算器处理的数据通常有特定的位宽,如8位、16位、32位等,这影响了运算器能处理的...

      C#位运算及运算符

      5. 位左移运算 位左移运算将整个数按位左移若干位,左移后空出的部分填 0。 例如:8 位的 byte 型变量byte a=0x65(即二进制的 01100101),将其左移 3 位:a的结果是 0x27(即二进制的00101000)。 6. 位右移运算 ...

      运算器组成实验报告

      5. 熟悉运算器内部的数据传输路径,了解数据在运算过程中的流动。 6. 设计一个支持有符号数和无符号数运算、补码加/减运算及有符号数溢出检测的运算器电路。 二、实验设备 使用JZYL—Ⅱ型计算机组成原理实验仪,...

      运算放大器权威指南

      运算放大器,简称Op Amp,是一种应用极为广泛的模拟集成电路,具备高增益的特点,通常用于信号的放大、滤波、波形产生以及信号的比较等功能。运算放大器的权威指南是针对电子工程师、设计师以及相关专业师生的重要...

      大数运算器 可做逆运算

      5. **逆运算**:逆运算通常指的是求解x关于模n的逆元,即找到一个y使得x * y ≡ 1 (mod n)。在密码学中,模逆元在RSA算法中尤为重要,因为公钥和私钥的生成就依赖于求解大数的模逆。 **RsaKit.exe** 是一个可能的...

      HMAC-MD5 C语言算法

      1. **键扩展**:首先,将用户提供的密钥与一个固定的填充值进行MD5运算,得到一个中间密钥。如果密钥长度超过MD5的输入限制(64字节),则先进行哈希运算。 2. **消息处理**:接着,用中间密钥对消息进行两次MD5...

      DSP实验二 基本算术运算

      5. **数据类型和溢出处理**: 在进行这些运算时,理解不同的数据类型(如字节、短整型、整型、长整型、单精度和双精度浮点)及其限制至关重要。特别要注意的是,定点运算中可能会遇到溢出问题,这需要使用适当的...

      计算机组成原理课件第九章运算方法与运算器

      5. **运算器设计**: - **ALU(算术逻辑单元)**:是运算器的核心,执行基本的算术和逻辑运算。 - **寄存器**:包括累加器、暂存器、标志寄存器等,用于存储中间结果和控制状态。 - **数据通路**:连接ALU、...

      二年级下册数学口算题混合运算.pdf

      9. 百分数运算:文档中出现了许多百分数运算题,如5× 70÷ 10=、25 ÷ 5× 9=等,这些题目旨在考察学生对百分数运算的掌握情况。 10. 求值运算:文档中出现了许多求值运算题,如4× 7× 7=、80+5× 7=等,...

      大数运算包含加,减,乘,除,取模,幂运算,模幂运算。支持十进制运算,二进制运算.zip

      5. **幂运算**:计算一个大数的幂通常是通过迭代或快速幂算法来实现的,后者利用了乘方的指数运算规则,大大减少了计算次数。在二进制环境下,幂运算可能涉及位操作和位移。 6. **模幂运算**:这是大数运算中的特殊...

      cgal 模型布尔运算代码

      5. **在UE4中使用**: UE4是一个强大的游戏开发引擎,支持自定义的C++插件。这个CGAL布尔运算的DLL可以作为UE4的一个插件,通过UE4的C++ API将CGAL的功能集成到游戏中。开发者需要在UE4的项目设置中配置DLL的路径,...

      底层硬件如何实现浮点运算_浮点fpga_浮点运算_fpga_FPGA浮点运算_硬件_

      5. **异常处理**:浮点运算可能遇到各种异常情况,如除零、溢出、下溢、NaN(非数字)等。在硬件中,这些异常需要被检测并适当地处理,通常会触发中断或设置标志位。 6. **流水线设计**:为了提高浮点运算的吞吐量...

      C语言集合运算器课设报告

      5. 调试与测试: 完成代码编写后,需要进行单元测试和集成测试,确保每个功能模块正确无误,同时进行性能优化,以满足预期的运行速度和内存使用。 总结,这个C语言集合运算器项目旨在提升学生的编程实践能力和理论...

      集成运算放大器原理

      5. 差模输入电阻:两个输入端之间的电阻,通常很高,接近无穷大。 6. 输出电压摆幅:运算放大器能提供的最大输出电压范围。 三、运算放大器的理想化模型 理想运算放大器有三个主要特征: 1. 无限大的开环增益 2. 零...

      Proteus 仿真运算器实验

      5. 分析和优化:根据仿真结果调整电路或逻辑,以优化性能或修正错误。 通过这个实验,学习者不仅能掌握74LS181 芯片的原理和应用,还能深化对总线结构的理解,提高使用Proteus进行电路仿真的技能。这种实践经验对于...

      《分数乘法的混合运算和简便运算》课件.ppt

      例如,8/3 * 4/1 * 3/2 = 16/1,7/4 * 1/9 * 18/5 = 7/1,以及4/4 * 1/10 + 1/4 = 5/2等,这些都要求学生灵活运用乘法的运算定律进行简便计算。 在能力提高部分,难度逐渐提升,如9/2 * 1/16 + 9/2 * 1/4 + 9/2 * 1...

      5.ndarray的运算.ipynb

      4 Numpy------ ndarray运算(逻辑运算、通用判断函数、三元运算符 、统计指标、案例:学生成绩统计运算)

    Global site tag (gtag.js) - Google Analytics