详解 JavaScript 中或者 || 和并且 && 运算符

发布于 2017-12-31 19:18:36 字数 3267 浏览 2624 评论 0

在编程语言中,||&& 分别表示 或者 和 并且,对于 a = a||""; 这样的代码。很多初学者对这两个字符可能会感到茫然和无助,今天就跟大家分享一下我的一些心得,如何去理解 ||&&

详解 JavaScript 中或者||和并且&&运算符

其实上文提到的代码等价于:

a = a||"defaultValue";

如果你还看不懂,那么看看下面的代码:

if(!a){
    a="defaultValue";
}

最终在详细一点:

if(a == null||a == ""||a == undefined){
    a = "defaultValue";
}

上面的三段代码都是一样的结果,是不是感到很神奇。

为了弄清这个问题,首先我们必须了解一个问题:JavaScript 中数据类型在转换为 bool 类型时发生了什么?

在 JavaScript 中,从这方面看,数据类型可以分为真值和假值。顾名思义,真值转换为 bool 时值为 true,假值转换为 bool 时值为 false。下表罗列了一些常见的数据类型转换为 bool 时的值:

数据类型转换为bool后的值
nullFALSE
undefinedFALSE
ObjectTRUE
functionTRUE
0FALSE
1TRUE
0、1之外的数字TRUE
字符串TRUE
""(空字符串)FALSE

if 表达式中,JavaScript 首先将条件表达式转换为 bool 类型,表达式为真值则执行 if 中的逻辑,否则跳过于是有了:

if(!a){
    a="defaultValue";
}

下面我们再来看 &&|| 两个表达式。

由于 JavaScript 是弱类型语言,所以在 JavaScript 中这两个表达式可能跟其他语言(比如 JAVA)中不太一样。

在 JavaScript 中,&& 运算符运算法则如下:

如果 && 左侧表达式的值为真值,则返回右侧表达式的值,否则返回左侧表达式的值,这就是说:

  1. i = ""&&"真值"; 等于 i = ""
  2. i = "真值"&&"其他真值"; 等于 i = "其他真值"
  3. i = "真值"&&""; 等于 i = ""

|| 运算符的运算法则如下:

如果 || 左侧表达式的值为真值,则返回左侧表达式的值,否则返回右侧表达式的值,这就是说:

  1. i = ""||"真值"; 等于 i = "真值"
  2. i = "真值"||"其他真值"; 等于 i = "真值"
  3. i = "真值"||""; 等于 i = "真值"

于是就可以理解 a = a||"defaultValue"; 的逻辑了。如果 a 为假值(等于null、空字符串等),则将 defaultValue 赋给 a,否则将 a 的值赋给 a 本身。

下面我们运用 ||&& 来简化程序:

var parameter="";
function test(parameter){
    //return 真值
    return true;
}
//真值操作
function operate1(parameter){
    return "真值操作";
}
//假值操作
function operate2(parameter){
    return "假值操作";
}
var result=test(parameter)&&operate1(parameter);
result=test(parameter)||operate2(parameter);
//等价于
result=test(parameter)?operate1(parameter):operate2(parameter);
alert(result);//真值操作
//也等价于
if(test(parameter)){
    result=operate1(parameter);
}else{
    result=operate2(parameter);
}
alert(result)//真值操作

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

lorenzathorton8

文章 0 评论 0

Zero

文章 0 评论 0

萧瑟寒风

文章 0 评论 0

mylayout

文章 0 评论 0

tkewei

文章 0 评论 0

17818769742

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文