5、运算

本文深入讲解JavaScript中的各种运算符,包括delete、void、位运算符等,并探讨它们在实际编程中的应用,帮助读者理解这些运算符如何改变程序的执行流程。
  • 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 是数字,它们当然不同。

内容概要:本文系统阐述了Java Persistence API(JPA)的核心概念、技术架构、核心组件及实践应用,重点介绍了JPA作为Java官方定义的对象关系映射(ORM)规范,如何通过实体类、EntityManager、JPQL和persistence.xml配置文件实现Java对象与数据库表之间的映射与操作。文章详细说明了JPA解决的传统JDBC开发痛点,如代码冗余、对象映射繁琐、跨数据库兼容性差等问题,并解析了JPA与Hibernate、EclipseLink等实现框架的关系。同时提供了基于Hibernate和MySQL的完整实践案例,涵盖Maven依赖配置、实体类定义、CRUD操作实现等关键步骤,并列举了常用JPA注解及其用途。最后总结了JPA的标准化优势、开发效率提升能力及在Spring生态中的延伸应用。 适合人群:具备一定Java基础,熟悉基本数据库操作,工作1-3年的后端开发人员或正在学习ORM技术的中级开发者。 使用场景及目标:①理解JPA作为ORM规范的核心原理与组件协作机制;②掌握基于JPA+Hibernate进行数据库操作的开发流程;③为技术选、团队培训或向Spring Data JPA过渡提供理论与实践基础。 阅读建议:此资源以理论结合实践的方式讲解JPA,建议读者在学习过程中同步搭建环境,动手实现文中示例代码,重点关注EntityManager的使用、JPQL语法特点以及注解配置规则,从而深入理解JPA的设计思想与工程价
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值