资讯专栏INFORMATION COLUMN

JS语言核心——“表达式和运算符”

李增田 / 2666人阅读

摘要:原始表达式直接量保留字变量原始表达式表达式的最小单位表达式中的短语,解释器会将其计算为一个结果对象和数据的初始化表达式对象直接量和数组直接量,它们和布尔直接量不同,它们不是原始表达式函数定义表达式函数直接量也不是原始表达式属性访问表达式语法

1 原始表达式

直接量、保留字、变量

原始表达式(primary expression):表达式的最小单位

表达式:JavaScript中的短语,JavaScript解释器会将其计算为一个结果

2 对象和数据的初始化表达式

对象直接量和数组直接量,它们和布尔直接量不同,它们不是原始表达式

3 函数定义表达式

函数直接量也不是原始表达式

4 属性访问表达式

语法:

expression . identifier
expression [ expression ]

5 调用表达式

调用表达式(invocation expression):调用或者执行函数或方法的语法表示

方法调用(method invocation):如果这个表达式是一个属性访问表达式,那么这个调用称做“方法调用”

6 对象创建表达式

对象创建表达式(object creation expression):创建一个对象并调用一个构造函数初始化新对象的属性:

var obj = new Object(); //比函数调用表达式多了一个new操作符
Object();
7 运算符概述 7.1 操作数的个数

一元运算符(unary operator):将一个表达式转换为另一个复杂的表达式

二元运算符(binary operator):将两个表达式合并成一个复杂的表达式

三元运算符(ternary operator):条件判断运算符?

7.2 左值

左值(lvalue):表达式只能出现在赋值运算符的左侧

7.3 运算符优先级

要注意的是,属性访问表达式和调用表达式的优先级非常高,当:typeof my.functions[x](y),尽管typeof是优先级最高的运算符之一,但typeof也是在两次属性访问和函数调用之后执行的

8 算数表达式 8.1 “+”运算符

有些时候要进行必要的转换:

var obj = {
    toString: function() {
        return "object";
    }
};
console.log("hello " + obj); //hello object
var obj = {};
console.log("hello " + obj); //hello [object Object]
console.log(1 + null); //1
console.log(1 + undefined); //NaN
8.2 一元算数运算符

+-是一元运算符,也是二元运算符

9 关系表达式 9.1 相等和不等运算符

如果两个引用值指向同一个对象、数组或函数,则它们是相等的

9.2 比较运算符

大写的ASCⅡ字幕都“小于”小写的ASCⅡ字幕;

加号运算符和比较运算符的行为不同,前者更偏爱字符串,如果其中一个操作数是字符串,则进行字符串连接;比较运算符则更偏爱数字,只有两个操作数都是字符串,才会进行字符串比较

当其中一个操作数是或能转成NaN的时候,比较运算符均返回false:

console.log("12" < NaN); //False;
console.log("12" > NaN); //False;
9.3 in运算符

左操作数是字符串或能够转换成字符串,右操作数则是对象

9.4 instanceof运算符

左操作数是对象,右操作数是标识对象的类

10 逻辑表达式 10.1 逻辑与(&&)

建议“&&”仅用来对真值和假值做布尔计算

10.2 逻辑或(||)

最常用的方式是从一组备选表达式中选出第一个真值表达式:var body = body || document.body;

function obj(p) {
    p = p || {};
    return p;
}
console.log(obj().toString()); //[oject Object]
console.log(obj({
    toString: function() {
        return "Oli";
    }
}).toString()); //Oli
10.3 逻辑非(!)

“!”运算符首先将其操作数转换为布尔值,然后再对布尔值求反

11 赋值表达式

一次性对多个变量赋值:

var x, y, z;
x=y=z=10;
console.log(x+y+z); //30
12 表达式计算 12.1 eval()

它使用了调用它的变量作用域环境

12.2 全局eval()

直接调用eval()时,它总是在调用它的上下文作用域内执行。其他的间接调用则使用全局对象作为其上下文作用域,并且无法读写、定义局部变量和函数:

var geval = eval;
var x = "global",
    y = "global";
function f() {
    var x = "local";
    eval("x += "changed""); //直接调用eval
    return x;
}
console.log(f(), x); //localchanged global;
function g() {
    var y = "local";
    geval("y += "changed""); //间接调用eval
    return y;
}
console.log(g(), y); //local globalchanged;
12.3 严格eval()

ECMAScript5在严格模式下,eval执行的代码段可以查询或更改局部变量,但不能在局部作用域中定义新的变量或函数;

此外,严格模式将“eval”列为保留字,不能用一个别名覆盖eval()函数(运算符)

// "use strict";
function f () {
    eval("var x = 10");
    console.log(x);
}
f(); //10

"use strict";
function f () {
    eval("var x = 10");
    console.log(x);
}
f(); //x is not defined
13 其他运算符 13.1 条件运算符(?:)

条件运算符中唯一一个三元运算符(三个操作数)

常用做法是:

var username;
var name = username ? username : "Oliver";
console.log(name); //"Oliver"
13.2 typeof运算符

最常用的做法是:

var value = 123;
var value = "hello";
console.log((typeof value === "string") ? """ + value + """ : value); //123 //"hello"

在IE9之前的版本中,非原生可执行对象的typeof运算将返回“object”

13.3 delete运算符

delete是一元操作符,它用来删除对象属性或者数组元素

13.4 void运算符

void让浏览器不必显示这个表达式的计算结果:

hello there

以上代码不推荐,应该绑定一个事件处理程序

13.5 逗号运算符(,)

最常用于for循环

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79023.html

相关文章

  • JavaScript 语言核心笔记(持续更新)

    摘要:在同一个块内,不允许用重复声明变量。中为新增了块级作用域。自带遍历器的对象有数组字符串类数组对象对象的对象等和结构对象。返回一个遍历器,使遍历数组的键值对键名键值。 目录 1.语法 2.类型、值和变量 3.表达式和运算符 4.语句 5.数组 6.对象 7.函数 8.全局属性和方法 9.词法作用域、作用域链、闭包 10.原型链、继承机制 11.this的理解 12.ES5新特性 13.E...

    suosuopuo 评论0 收藏0
  • JavaScript权威指南笔记(上)-语言核心

    摘要:二进制浮点数和四舍五入错误在使用实数时,常常只是真实值的一个近似表示。作用域分类全局函数,块级作用域链变量对象用于存储执行上下文中的变量函数声明函数参数变量初始化阶段浏览器截图浏览器截图代码执行阶段类和模块 词法结构 字符集 使用Unicode编写 ES3 Unicode2.1+ ES5 Unicode3+ 区分大小写 注释 // 注释 /* 注释 */ 标识符和保留字 必须以字...

    skinner 评论0 收藏0
  • JavaScript 闯关记

    摘要:对象数组初始化表达式,闯关记之上文档对象模型是针对和文档的一个。闯关记之数组数组是值的有序集合。数组是动态的,根闯关记之语法的语法大量借鉴了及其他类语言如和的语法。 《JavaScript 闯关记》之 DOM(下) Element 类型 除了 Document 类型之外,Element 类型就要算是 Web 编程中最常用的类型了。Element 类型用于表现 XML 或 HTML 元素...

    mj 评论0 收藏0
  • JS基础学习03「表达式运算符

    摘要:函数定义表达式。对象创建表达式。需要注意的是,大多数运算符都是由标点符号表示的,比如和。也就是说,空字符串将被当作,布尔值将被当作。对于和,则分别调用函数并取得字符串和。 表达式 表达式是由数字、运算符、数字分组符号(如括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。JavaScript 表达式主要有以下几种形式: 原始表达式:常量、变量、保留字。 对象、数组初始...

    dcr309duan 评论0 收藏0
  • 《JavaScript 闯关记》之表达式运算符

    摘要:函数定义表达式。对象创建表达式。也就是说,空字符串将被当作,布尔值将被当作。如果有一个操作数是对象数值或布尔值,则调用它们的方法取得相应的字符串值,然后再应用前面关于字符串的规则。对于和,则分别调用函数并取得字符串和。 表达式 表达式是由数字、运算符、数字分组符号(如括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。JavaScript 表达式主要有以下几种形式: ...

    Render 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<