从零开始学web开发之JavaScript-3.数据类型-(3)布尔值boolean

本节内容引用 《JavaScript 标准参考教程(alpha)》,by 阮一峰

1.简介

  • 布尔值只有两个值,真与假,用true与false两个关键字表示。
  • 一般用于程序流程的控制,if(布尔值)用以判断状态。

2.逻辑运算符

<1>.逻辑与&&(and)

a && b.
  • 如果 a = true,b=true;则结果为true.
  • 如果a=false;则结果为false,并且不会再判断b的值。
  • 如果a=true,b=false;则结果为false.

<2>.逻辑或||(or)

a || b.
  • 如果 a = false,b=flase;则结果为false.
  • 如果a=true;则结果为true,并且不会再判断b的值。
  • 如果a=false,b=true;则结果为true.

或运算符常用于为一个变量设置默认值。

function saveText(text) {
  text = text || '';
  // ...
}

// 或者写成

saveText(this.text || '')

上面代码表示,如果函数调用时,没有提供参数,则该参数默认设置为空字符串。

<3>.取反!(not)

!a,
!b.
  • 如果a=true,则!a=false;
  • 如果b=false,则!b=true;

以下六个值取反后为true,其他值取反后都为false。

  • undefined
  • null
  • false
  • 0(包括+0和-0)
  • NaN
  • 空字符串(”)

如果对一个值连续做两次取反运算,等于将其转为对应的布尔值,与Boolean函数的作用相同,两次取反就是将一个值转为布尔值的简便写法。

3.关系运算符

比较运算符用于比较两个值,然后返回一个布尔值,表示是否满足比较条件。
比较运算符可以比较各种类型的值,不仅仅是数值。

<1>.相等比较符

1. 严格相等比较符 \=\=\= ,类型与值一致的比较符
  • 先比较两者的类型是否一致,如不一致,则直接返回false;
  • 然后再比较两者值的大小,如相等才返回true.
    如:
1 === "1";//false
 +0===-0;//true

对于两个对象,===比较的是两者的对象地址是否一致。
如:

{} === {} // false
[] === [] // false
var v1 = {};
var v2 = v1;
v1 === v2 // true
2. 严格不相等运算符, !==
  • 严格相等运算符有一个对应的“严格不相等运算符”(!==),两者的运算结果正好相反。
3. 相等比较符,==,只比较两者的值是否相等。

如:

1 == true // true
// 等同于 1 === 1

0 == false // true
// 等同于 0 === 0

对象(这里指广义的对象,包括数组和函数)与原始类型的值比较时,对象转化成原始类型的值,再进行比较。

[1] == 1 // true
// 等同于 Number([1]) == 1

[1] == '1' // true
// 等同于 String([1]) == Number('1')
4. 不相等运算符,!=
  • 相等运算符有一个对应的“不相等运算符”(!=),两者的运算结果正好相反。

<2>.大小比较符

  • 如果两个运算子都是字符串,则按照字典顺序比较(实际上是比较Unicode码点)。
  • 否则,将两个运算子都转成数值,再进行比较(等同于先调用Number函数)。

    1. 如果两者都是原始类型,会先转为数值再进行比较。
true > false // true
// 等同于 Number(true) > Number(false)
// 即 1 > 0
  1. 如果比较的两者是对象,必须先将其转为原始类型的值,即先调用valueOf方法,如果返回的还是对象,再接着调用toString方法。
var x = [2];
[2] > [1] // true
// 等同于 [2].valueOf().toString() > [1].valueOf().toString()
// 即 '2' > '1'
  1. 因为比较是unicode码点,所以中文也可用以比较。
'大' > '小' // false

上面代码中,“大”的 Unicode 码点是22823,“小”是23567,因此返回false。

<3>.三元运算符

表达式:

boolean?a:b;

如果boolean为true,同返回a;否则返回b.
相当于if..else的简易表达,区分在于三元运算符有返回值,而if.else无返回值。
示例:

var str1 = 1?"school":"home";
//str1的值为school.s

4.位运算符

这些位运算符直接处理每一个比特位(bit),所以是非常底层的运算,好处是速度极快,缺点是很不直观,许多场合不能使用它们,否则会使代码难以理解和查错。
位运算符只对整数起作用,如果一个运算子不是整数,会自动转为整数后再执行。
JavaScript中的数值都是以64位浮点数的形式储存,但是做位运算的时候,是以32位带符号的整数进行运算的,并且返回值也是一个32位带符号的整数.

位运算符用于直接对二进制位进行计算,一共有7个。

  • 或运算(or):符号为|,表示若两个二进制位都为0,则结果为0,否则为1。
i = i | 0;将i(不管是整数或小数)转为32位整数。
这个特性可用以将一个值转为整数。
  • 与运算(and):符号为&,表示若两个二进制位都为1,则结果为1,否则为0。
  • 否运算(not):符号为~,表示对一个二进制位取反。
  • 异或运算(xor):符号为^,表示若两个二进制位不相同,则结果为1,否则为0。
  • 左移运算(left shift):符号为<<,左移运算符表示将一个数的二进制值向左移动指定的位数,尾部补0,即乘以2的指定次方(最高位即符号位不参与移动)。
  • 右移运算(right shift):符号为>>,右移运算符表示将一个数的二进制值向右移动指定的位数,头部补0,即除以2的指定次方(最高位即符号位不参与移动)。
  • 带符号位的右移运算(zero filled right shift):符号为>>>,该运算符表示将一个数的二进制形式向右移动,包括符号位也参与移动,头部补0。所以,该运算总是得到正值。对于正数,该运算的结果与右移运算符(»)完全一致,区别主要在于负数。。

    5.示例网页

    网页链接

发布了92 篇原创文章 · 获赞 68 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/pigdreams/article/details/80385834