犀牛书第七版学习笔记:表达式和运算符

本文详细介绍了JavaScript中的表达式,包括基本表达式、对象和数组初始化器、函数定义表达式、属性访问表达式、调用表达式、运算符概述。重点讲解了运算符的类型转换、副作用、优先级和关联性,以及相等和逻辑运算符的用法,特别是逻辑AND(&&)的捷径行为。此外,还提到了条件属性访问和条件调用的最新特性。
摘要由CSDN通过智能技术生成

目录

1.基本表达式Primary Expressions

2.对象和数组初始化器Object and Array Initializers

1.数组初始化器

2.对象初始化器

3.函数定义表达式Function Definition Expressions

4.属性访问表达式Property Access Expressions

条件属性访问Conditional Property Access

5.调用表达式Invocation Expressions

1.函数调用

2.方法调用

3.条件调用Conditional Invocation

6.对象创建表达式Object Creation Expressions

7.运算符概述Operator Overview

1.操作数数量Number of Operands

2.操作数和结果类型Operand and Result Type

1.JavaScript 运算符通常会根据需要转换其操作数的类型

2.某些运算符的行为会因所使用的操作数的类型而异

3.操作符副作用Operator Side Effects

4.运算符优先级Operator Precedence

5.运算符关联性Operator Associativity

8 相等操作符Equality and Inequality Operators

1.严格相等STRICT EQUALITY

10.逻辑表达式Logical Expressions

1.Logical AND (&&)

1.执行布尔 AND 运算

2.作为真值和假值的布尔 AND 运算符

3.捷径

2.Logical OR (||)


表达式是 JavaScript 的一个短语phrase,可以通过计算来产生一个值be evaluated to produce a value。

  • 嵌入在程序中的常量constant embedded literally in是一种非常简单的表达式。
  • 变量名variable name也是一个简单的表达式,它计算为该变量分配的任何值whatever value has been assigned to that variable。

复杂表达式是从更简单的表达式构建的。

  • 数组访问表达式array access expression由一个计算结果为数组的表达式后跟一个左方括号、一个计算结果为整数的表达式和一个右方括号组成。这个新的、更复杂的表达式计算出存储在指定数组的指定索引处的值。
  • 函数调用表达式function invocation expression由一个计算结果为函数对象function object的表达式和零个或多个用作函数参数的附加表达式组成。

从更简单的表达式构建复杂表达式的最常见方法是使用运算符。

  • 运算符以某种方式组合其操作数(通常是其中的两个)的值并计算为新值。
  • 乘法运算符 * 是一个简单的例子。表达式 x * y 计算为表达式 x 和 y 的值的乘积。
  • 为简单起见,我们有时会说运算符返回一个值,而不是“评估”一个值an operator returns a value rather than “evaluates to” a value

1.基本表达式Primary Expressions

基本表达式:最简单的表达式,不会包含任何更简单的表达式

  • 常量constant或字面量值literal values

字面量是直接嵌入到程序中的常量值 Literals are constant values that are embedded directly in your program

1.23 // A number literal 
"hello" // A string literal 
/pattern/ // A regular expression literal
  • 某些语言关键字

JavaScript 的一些保留字reserved words是基本表达式

true // Evalutes to the boolean true value 评估为布尔型真值
false // Evaluates to the boolean false value 估算为布尔假值
null // Evaluates to the null value 
this // Evaluates to the "current" object **评估为“当前”对象**

this不是一个常数——它在程序的不同位置计算为不同的值。、

this 关键字用于面向对象的编程中。

在方法的主体中Within the body of a method, this 计算为调用该方法的对象the object on which the method was invoked。

  • 变量引用variable references

对全局对象的变量、常量或属性的引用a reference to a variable, constant, or property of the global object

i // Evaluates to the value of the variable i. 
sum // Evaluates to the value of the variable sum. 
undefined // **The value of the "undefined" property of the global object 全局对象的“未定义”属性的值**

当任何标识符identifier在程序中单独出现时,JavaScript 假定它是全局对象的变量或常量或属性并查找其值。 如果不存在具有该名称的变量,则尝试评估不存在的变量会引发 ReferenceError

2.对象和数组初始化器Object and Array Initializers

对象和数组初始化器Object and array initializers其值为新创建对象或数组whose value is a newly created object or array的表达式。

这些初始化式表达式有时被称为对象字面量和数组字面量object literals and array literals。然而,与真正的字面量不同,它们不是基本表达式,因为它们包含许多指定属性和元素值的子表达式subexpressions that specify property and element values

1.数组初始化器

数组初始化式是用方括号括起来的逗号分隔的表达式列表。数组初始化器的值是一个新创建的数组。

[] // An empty array: no expressions inside brackets means no elements 空数组:方括号内没有表达式意味着没有元素
[1+2,3+4] // A 2-element array. First element is 3, second is 7

数组初始化器中的元素表达式element expressions本身可以是数组初始化器,这意味着这些表达式可以创建嵌套数组nested arrays

let matrix = [[1,2,3], [4,5,6], [7,8,9]];

只要在逗号之间省略一个值,就可以在数组字面量中包含未定义的元素Undefined elements。

例如,下面的数组包含5个元素,其中包括3个未定义的元素

let sparseArray = [1,,,,5]; //**4个逗号,里面省略了3个值**

在数组初始化器中的最后一个表达式之后允许使用单个尾随逗号,这样并不会创建未定义的元素。 数组访问表达式对于(最后一个表达式的索引+1)的索引求值的结果是undefined。

2.对象初始化器

对象初始化器表达式类似于数组初始化器表达式,但方括号被花括号取代,并且每个子表达式都以属性名和冒号作为前缀

let p = { x: 2.3, y: -1.2 }; // An object with 2 properties 
let q = {}; // An empty object with no properties 
q.x = 2.3; q.y = -1.2; // Now q has the same properties as p

在ES6中,对象字面量拥有更丰富的语法特性

对象字面量可以嵌套

let rectangle = { 
     upperLeft: { x: 2, y: 2 }, 
     lowerRight: { x: 4, y: 5 } 
};

3.函数定义表达式Function Definition Expressions

函数定义表达式定义了一个JavaScript函数,该表达式的值就是新定义的函数。

在某种意义上,函数定义表达式是一个**“函数字面量”“function literal”**,就像对象初始化器是一个“对象字面量”“object literal”一样。

函数定义表达式通常由关键字 function 后跟括号中的零个或多个标识符(参数名称)的逗号分隔列表和花括号中的 JavaScript 代码块(函数体)组成

// This function returns the square of the value passed to it. 
let square = function(x) { return x * x; };

函数定义表达式也可以包含函数名a name for the function。

函数也可以使用函数语句function statement而不是函数表达式来定义。

在ES6及以后版本中,函数表达式可以使用紧凑的新“箭头函数”语法a compact new “arrow function” syntax。

4.属性访问表达式Property Access Expressions

属性访问表达式的计算结果为对象属性object property数组元素array element的值。

JavaScript定义了两种属性访问语法

expression . identifier 
expression [ expression ]

第一种: 是一个表达式,后跟一个句点和一个标识符。 表达式指定对象,标识符指定所需属性的名称。

第二种: 在第一个表达式(对象或数组)之后使用方括号中的另一个表达式(指定所需属性的名称或所需数组元素的索引)

let o = {x: 1, y: {z: 3}}; // An example object 
let a = [o, 4, [5, 6]]; // An example array that contains the object 
o.x // => 1: property x of expression o
o.y.z // => 3: **property z of expression o.y** 
o["x"] // => 1: property x of object o 
a[1] // => 4: element at index 1 of expression a 
a[2]["1"] // => 6: element at index 1 of expression a[2]
a[0].x // => 1: property x of expression a[0]
  • 对于任一类型的属性访问表达式,. 或者方括号之前的表达式将首先被评估。
    1. 如果第一个表达式计算出的值为 null 或未定义undefined,则表达式将引发 TypeError,因为null 或未定义undefined两个值是不能具有属性
    2. 如果对象表达式后跟一个点和一个标识符,则该标识符命名的属性的值成为表达式的整体值。
    3. 如果对象表达式后跟方括号中的另一个表达式,则计算第二个表达式并将其转换为字符串。表达式的整体值就是由该字符串命名的属性的值。
    4. 在任何一种情况下,如果命名属性不存在,则属性访问表达式的值是未定义的undefined。

第一种访问表达式语法较简单的一种,但如果属性名称包含空格

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值