javascript的逻辑或||和逻辑与&&问题?
答案:5 悬赏:0 手机版
解决时间 2021-03-24 09:06
- 提问者网友:皆是孤独
- 2021-03-24 04:05
javascript的逻辑或||和逻辑与&&问题?
最佳答案
- 五星知识达人网友:我住北渡口
- 2021-03-24 05:42
“&&”运算符可以从三个不同的层次进行理解。
最简单的第一层理解是,当操作数都是布尔值的时候,“&&”对两个值执行布尔与(AND)操作,只有在第一个操作数和第二个操作数都是true的时候,它才返回true。如果其中一个操作数是false,它返回false。
“&&”常用来连接两个关系表达式:
x == 0 && y == 0 // 只有在x和y都是0的时候,才返回true 但是“&&”的操作数并不一定是布尔值。对“&&”的第二层理解是,“&&”可以对真值和假值进行布尔与(AND)操作。如果两个操作数都是真值,那么返回一个真值;否则,至少一个操作数是假值的话,则返回一个假值。在JavaScript中任何希望使用布尔值的地方,表达式和语句都会将其当做真值或假值来对待,因此实际上“&&”并不总是返回true和false。
例如:
3&&4 //返回一个真值 4
2&&null //返回一个假值 null
undefined&&null //返回一个假值 undefined
//假值是false、null、undefined、0、-0、NaN和"",所有其他的值包括所有对象都是真值 我们深入讨论对“&&”的第三层(也是最后一层)理解。运算符首先计算左操作数的值,即首先计算“&&”左侧的表达式。如果计算结果是假值,那么整个表达式的结果一定也是假值,因此“&&”这时简单地返回左操作数的值,而并不会对右操作数进行计算。反过来讲,如果左操作数是真值,那么整个表达式的结果则依赖于右操作数的值。如果右操作数是真值,那么整个表达式的值一定是真值;如果右操作数是假值,那么整个表达式的值一定是假值。
因此,当左操作数是真值时,“&&”运算符将计算右操作数的值并将其返回作为整个表达式的计算结果:
var o = { x : 1 };
var p = null;
o &&o.x // =>1:o 是真值,因此返回值为o.x
p &&
p.x //=>null: p是假值,因此将其返回,而并不去计算p.x 这对于理解“&&”可能不会去计算右操作数的情况至关重要,在上述示例代码中,变量p的值是null,而如果计算表达式p.x的话则会抛出一个类型错误异常。但是示例代码使用了“&&”的一种符合语言习惯的用法,因此只有在p为真值(不能是null或者undefined)的情况下才会计算p.x。
“&&”的行为有时称做“短路”(short circuiting),我们也会经常看到很多代码利用了这一特性来有条件地执行代码。
例如,下面两行JavaScript代码是完全等价的:
if (a == b) stop(); //只有在a==b的时候才调用stop()
(a == b) &&stop(); //同上 尽管“&&”可以按照第二层和第三层的理解进行一些复杂表达式运算,但大多数情况下,“&&”仅用来对真值和假值做布尔计算。
“||”运算符对两个操作数做布尔或(OR)运算。如果其中一个或者两个操作数是真值,它返回一个真值。如果两个操作数都是假值,它返回一个假值。
尽管“||”运算符大多数情况下只是做简单布尔或(OR)运算,和“&&”一样,它也具有一些更复杂的行为。它会首先计算第一个操作数的值,也就是说会首先计算左侧的表达式。如果计算结果为真值,那么返回这个真值。否则,再计算第二个操作数的值,即计算右侧的表达式,并返回这个表达式的计算结果。
这个运算符最常用的方式是用来从一组备选表达式中选出第一个真值表达式:
// 如果max_width已经定义了,直接使用它;否则在preferences对象中查找max_width
// 如果没有定义它,则使用一个写死的常量
var max = max_width || preferences.max_width || 500; 这种惯用法通常用在函数体内,用来给参数提供默认值:
// 将o的成员属性复制到p,并返回
pfunction copy(o, p) {
p = p || {}; //如果向参数p没有传入任何对象,则使用一个新创建的对象
// 函数体内的主逻辑
}
最简单的第一层理解是,当操作数都是布尔值的时候,“&&”对两个值执行布尔与(AND)操作,只有在第一个操作数和第二个操作数都是true的时候,它才返回true。如果其中一个操作数是false,它返回false。
“&&”常用来连接两个关系表达式:
x == 0 && y == 0 // 只有在x和y都是0的时候,才返回true 但是“&&”的操作数并不一定是布尔值。对“&&”的第二层理解是,“&&”可以对真值和假值进行布尔与(AND)操作。如果两个操作数都是真值,那么返回一个真值;否则,至少一个操作数是假值的话,则返回一个假值。在JavaScript中任何希望使用布尔值的地方,表达式和语句都会将其当做真值或假值来对待,因此实际上“&&”并不总是返回true和false。
例如:
3&&4 //返回一个真值 4
2&&null //返回一个假值 null
undefined&&null //返回一个假值 undefined
//假值是false、null、undefined、0、-0、NaN和"",所有其他的值包括所有对象都是真值 我们深入讨论对“&&”的第三层(也是最后一层)理解。运算符首先计算左操作数的值,即首先计算“&&”左侧的表达式。如果计算结果是假值,那么整个表达式的结果一定也是假值,因此“&&”这时简单地返回左操作数的值,而并不会对右操作数进行计算。反过来讲,如果左操作数是真值,那么整个表达式的结果则依赖于右操作数的值。如果右操作数是真值,那么整个表达式的值一定是真值;如果右操作数是假值,那么整个表达式的值一定是假值。
因此,当左操作数是真值时,“&&”运算符将计算右操作数的值并将其返回作为整个表达式的计算结果:
var o = { x : 1 };
var p = null;
o &&o.x // =>1:o 是真值,因此返回值为o.x
p &&
p.x //=>null: p是假值,因此将其返回,而并不去计算p.x 这对于理解“&&”可能不会去计算右操作数的情况至关重要,在上述示例代码中,变量p的值是null,而如果计算表达式p.x的话则会抛出一个类型错误异常。但是示例代码使用了“&&”的一种符合语言习惯的用法,因此只有在p为真值(不能是null或者undefined)的情况下才会计算p.x。
“&&”的行为有时称做“短路”(short circuiting),我们也会经常看到很多代码利用了这一特性来有条件地执行代码。
例如,下面两行JavaScript代码是完全等价的:
if (a == b) stop(); //只有在a==b的时候才调用stop()
(a == b) &&stop(); //同上 尽管“&&”可以按照第二层和第三层的理解进行一些复杂表达式运算,但大多数情况下,“&&”仅用来对真值和假值做布尔计算。
“||”运算符对两个操作数做布尔或(OR)运算。如果其中一个或者两个操作数是真值,它返回一个真值。如果两个操作数都是假值,它返回一个假值。
尽管“||”运算符大多数情况下只是做简单布尔或(OR)运算,和“&&”一样,它也具有一些更复杂的行为。它会首先计算第一个操作数的值,也就是说会首先计算左侧的表达式。如果计算结果为真值,那么返回这个真值。否则,再计算第二个操作数的值,即计算右侧的表达式,并返回这个表达式的计算结果。
这个运算符最常用的方式是用来从一组备选表达式中选出第一个真值表达式:
// 如果max_width已经定义了,直接使用它;否则在preferences对象中查找max_width
// 如果没有定义它,则使用一个写死的常量
var max = max_width || preferences.max_width || 500; 这种惯用法通常用在函数体内,用来给参数提供默认值:
// 将o的成员属性复制到p,并返回
pfunction copy(o, p) {
p = p || {}; //如果向参数p没有传入任何对象,则使用一个新创建的对象
// 函数体内的主逻辑
}
全部回答
- 1楼网友:枭雄戏美人
- 2021-03-24 07:50
其实没必要那么麻烦,想验证电话号码的话,在网上搜个正则表达式验证下就行了,正则表达式很强大的 var re = 正则;if(!show.TEL.value.test(re)){alert('输入的电话号码不合法');......}
- 2楼网友:拾荒鲤
- 2021-03-24 07:13
&&左右两个都是正确是正确的||有一个正确就是正确的自己考虑一下吧
- 3楼网友:话散在刀尖上
- 2021-03-24 06:57
首先要弄清楚isNaN的意思。isNaN是判断是否为非数字,意思是如果不是数字,返回true,例如含有字母时;如果为数字,返回false。其次,你得逻辑是不对的,判断电话号码的时候要求必须是数字并且长度大于11,如果不符合以上条件,因该给提示,因此你想实现的应该是非数字或者长度小于11都给提示,所以应该用||。另外建议用正则表达式验证这些东西。网上有很多例子,自己可以研究一下写一个自己的公共验证JS。
- 4楼网友:孤独入客枕
- 2021-03-24 06:51
isNaN是非数字,意思是如果不是数字,那么当去都为数字时,返回false,里面有字母,返回true,你想验证电话,那么全数字返回false,有字母返回true。
你这个条件如果用&&,那么就是里面有字母,并且长度小于11位,才会报错。
你这个条件如果用&&,那么就是里面有字母,并且长度小于11位,才会报错。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯