💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
#第4章 表达式和运算符 - <a href="#no1">4.1 原始表达式</a> - <a href="#no2">4.2 对象和数组的初始化表达式</a> - <a href="#no3">4.3 函数定义表达式</a> - <a href="#no4">4.4 属性访问表达式</a> - <a href="#no5">4.5 调用表达式</a> - <a href="#no6">4.6 对象创建表达式</a> - <a href="#no7">4.7 运算符概述</a> - <a href="#no8">4.8 算术表达式</a> - <a href="#no9">4.9 关系表达式</a> - <a href="#no10">4.10 逻辑表达式</a> - <a href="#no11">4.11 赋值表达式</a> - <a href="#no12">4.12 表达式计算</a> - <a href="#no13">4.13 其他运算符</a> **表达式是JS中的一个短语。JS解释器会将其计算出一个结果。** ##<a name="no1">4.1 原始表达式</a> > 原是表达式是表达式的最小单位——它们不再包含其他表达式。JS中原始表达式包含常量或直接量、关键字和变量。 ##<a name="no2">4.2 对象和数组的初始化表达式</a> > 对象和数组初始化表达式实际上是一个新建的对象和数组。这些初始化表达式有时称做“对象直接量”和“数组直接量”。它们不是原是表达式,因为它们所包含的成员或者元素都是子表达式。 ##<a name="no3">4.3 函数定义表达式</a> > 函数定义表达式定义一个JS函数。表达式的值是这个新定义的函数。 ##<a name="no4">4.4 属性访问表达式</a> > 属性访问表达式运算得到一个对象属性或一个数组元素的值。JS为属性访问定义了两种语法: 1. exoression.indentifier 2. expression[expression] 第一种方法写法更加简单,只适用于要访问的属性名称是合法的标识符,并且需要知道要访问的属性的名字。 ##<a name="no5">4.5 调用表达式</a> > JS中的调用表达式是一种调用(或者执行)函数或方法的语法表示。它以一个函数表达式开始,这个函数表达式指代了要调用的函数。函数表达式后跟随一对圆括号,括号内是一个以逗号隔开的参数列表。 ##<a name="no6">4.6 对象创建表达式</a> > 对象创建表达式创建一个对象并调用一个函数(这个函数称作构造函数)初始化新对象的属性。前面有一个关键字`new`。 ##<a name="no7">4.7 运算符概述</a> > JS中运算符用于算术表达式、比较表达式、逻辑表达式、赋值表达式等。 ###4.7.1 操作数的个数 略 ###4.7.2 操作数类型和结果类型 略 ###4.7.3 左值 > 表达式只能出现在赋值运算符的左侧。在JS中,变量、对象属性和数组元素均是左值。 ###4.7.4 运算符的副作用 略 ###4.7.5 运算符优先级 > 《JavaScript权威指南-第六版》P66按照优先级从高到底排序。 ###4.7.6 运算符的结合性 > 结合性指定了在多个具有同样优先级的运算符表达式中的运算顺序。 ###4.7.7 运算顺序 > JS中严格按照从左到右的顺序来计算表达式。 ##<a name="no8">4.8 算术表达式</a> 基本的算术运算符: 1. `*`(乘法) 2. `/`(除法) 3. `%`(求余) 4. `+`(加法) 5. `-`(减法) ###4.8.1 “+”运算符 > 二元加法运算符“+”可以对两个数字做加法,也可以做字符串连接操作。 ###4.8.2 一元算术运算符 > 一元算术运算符作用于一个单独的操作数,并产生一个新值。 ###4.8.3 位运算符 > 位运算符可以对由数字表示的二进制数据进行更低层级的按位运算。(`& 、 | 、 ^ 、 ~ 、 << 、 >> 、 >>>`) ##<a name="no9">4.9 关系表达式</a> > 关系运算符用于测试两个值之间的关系,根据关系是否存在而返回`true`或`false`。关系表达式总是返回一个布尔值。 ###4.9.1 相等和不想等运算符 > `==`和`===`运算符用于比较两个值是否相等。 > `!=`和`!==`与前面两个相反。 > 它们之间的区别略。 ###4.9.2 比较运算符 > 比较运算符用来检测两个操作数的大小关系(数值大小或者字母表的顺序)。返回结果为布尔值。 1. `<`(小于) 2. `>`(大于) 3. `<=`(小于等于) 4. `>=`(大于等于) ###4.9.3 in运算符 > `in`运算符希望它的左操作数是一个字符串或可以转换为字符串,希望它的右操作数是一个对象。如果右侧的对象拥有一个名为左操作数值的属性名,那么表达式返回`true`。 例如: var point = {x:1, y:1}; //定义一个对象 'x' in point //=> true:对象有一个名为'x'的属性 'z' in point //=> false:对象不存在一个名为'z'的属性 'toString' in point //=> true:对象继承了toString()方法 ###4.9.4 instanceof运算符 > `instanceof`运算符希望左操作数是一个对象,右操作数标识对象的类。如果左侧的对象是右侧类的实例,则表达式返回`true`;否则返回`false`。 例如: var d = new Date(); d instanceof Datel //=> true,d是由Date()创建的 d instanceof Object //=> true d instanceof Number //=> false ##<a name="no10">4.10 逻辑表达式</a> - `&&` - `||` - `!` ###4.10.1 逻辑与(`&&`) > `&&`对两个值执行布尔与(AND)操作,只有在第一个操作数和第二个操作数均为`true`时,它才返回`true`。如果其中一个操作数是`false`,它返回`false`。 ###4.10.2 逻辑或(`||`) > `||`运算符对两个操作数做布尔或(OR)操作。如果其中一个或者两个操作数是真值,它返回一个真值。如果两个操作数都是假值,它返回一个假值。 ###4.10.3 逻辑非(`!`) > `!`运算符是一元运算符。它防止在一个单独的操作数之前。它的目的是将操作数的布尔值进行求反。 ##<a name="no11">4.11 赋值表达式</a> > JS使用`=`运算符来给变量或者属性赋值。 ##<a name="no12">4.12 表达式计算</a> > JS可以解释运行由JS源代码组成的字符串,并产生一个值。JS通过全局函数`eval()`来完成这个工作。 eval('3+2'); //=> 5 ###4.12.1 eval() > `eval()`只有一个参数。如果传入的参数不是字符串,它直接返回这个参数。如果是字符串,它会当成JS代码进行编译,编译失败则抛出语法错误异常。如果编译程刚,则开始执行这段代码,并返回字符串中的最后一个表达式或语句的值,如果最后一个表达式或语句没有值,则最终返回`undefined`。 ###4.12.2 全局`eval()` 略(P85) ###4.12.3 严格`eval()` 略(P86) ##<a name="no13">4.13 其他运算符</a> ###4.13.1 条件运算符(?;) > 条件运算符是JS中唯一一个三元运算符。条件运算符的操作数可以是任意类型。第一个操作数当成布尔值,如果它是真值,那么将计算第二个操作数,并返回其计算结果。否则,将计算第三个操作数,并返回其计算结果。第二个和第三个操作俗话总是会计算其中之一,不可能两者同时执行。 ###4.13.2 typeof 运算符 > `typeof`是一元运算符,放在其单个操作数的前面,操作数可以是任意类型。返回值为表示操作数类型的一个字符串。 ###4.13.3 delete运算符 > `delete`是一元操作符,它用来删除对象属性或者数组元素。它是用来做删除操作的,不是用来返回一个值的。 ###4.13.4 void运算符 > `void`是一元运算符,它出现在操作数之前,操作数可以是任意类型。不是很常用。。。。 ###4.13.5 逗号运算符(,) > 逗号运算符是二元运算符,它的操作数可以是任意类型。它首先计算左操作数,然后计算右操作数,最后返回右操作数的值。 例: i=0, j=1, k=2; 计算结果是2,它和下面的代码基本上是等价的: i=0; j=1; k=2; **整章到P90完结**