运算符的妙用以及部分机理解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 运算符的妙用以及部分机理解析

运算符的"诡异"现象

函数基础知识

普通函数调用时,this指向的是调用函数的对象

image.png

person.getName

image.png

getName

image.png

// 浏览器中执行 var nameVar = "nameVar"; let nameLet = "nameLet"; const nameConst = "nameConst"; console.log("nameVar:", window.nameVar); console.log("nameLet:", window.nameLet); console.log("nameConst:", window.nameConst);


image.png

(person.getName)()

有没有赋值操作?

赋值的话值给谁了?

分组运算符知识点

image.png

引用(协议内部的reference required)

内部引用类型不是语言数据类型

用于解释诸如delete、typeof 和赋值等操作符的行为

例如,赋值的左操作数应该产生一个引用记录。

赋值

var10 = 10; 10 = 10 // SyntaxError: Invalid left-hand side in assignment // { a: 1 } = { a: 1 }

image.png

引用相关的两个重要操作

GetValue(V)︰即取值操作,返回的是确定的值

PutValue(V,W):设置值,对某个引用设置, 将v赋值给w

PutValue要求第一个参数是引用(查看协议)

image.png

image.png

v=v

可以理解为︰ v = GetValue(v)

v在作为左手端的时候,它是引用;

而作为右手端的时候,它是值。

其他赋值操作

image.png

分组运算符()

分组运算符里面可以是表达式,也可以是字面量的值

此算法不将GetValue应用于计算Expression(表达式)的结果。这样做的主要原因是,诸如delete和typeof 等操作符可以应用于括号表达式

(0, person.getName)()

分组运算符

逗号运算符

逗号运算符

MDN:逗号操作符对它的每个操作数水宜(从左到返回最后一个操作数的值。

image.png

产生了赋值操作,等同(const getName = person.getName)()

this:全局对象, window

答案:undefined

typeof 未申明变量为什么不报错(非严格模式)

未发生求值? 不是的,

答案:引用不可达,直接返回undefined


image.png

image.png

var varNum = 10; function evalCode(){ eval(var varNum = 20) } function evalCode2(){ (0,eval)(var varNum = 30) } console.log("varNum:", varNum); evalCode() console.log("varNum:", varNum); evalCode2(); console.log("varNum:", varNum); // varNum: 10 // varNum: 10 // varNum: 10

目录
相关文章
|
6月前
|
Java
Java程序设计基础——条件运算符的深入解析
Java程序设计基础——条件运算符的深入解析
|
3月前
|
Kotlin
Kotlin 运算符详解:算术、赋值、比较与逻辑运算符全解析
## Kotlin 运算符 - **用途**: 对变量和值执行操作。 - **示例**: ```kotlin var x = 100 + 50 // 150 ``` - **分类**: - **算术**: `+`, `-`, `*`, `/`, `%`, `++`, `--`. - **赋值**: `=`, `+=`, `-=`. - **比较**: `==`, `!=`, `<`, `>`, `<=`, `>=`. - **逻辑**: `&&`, `||`, `!`.
32 2
|
6月前
|
存储 数据库连接 PHP
【PHP开发专栏】深入解析PHP数据类型与运算符
【4月更文挑战第30天】本文深入探讨了PHP的编程基础——数据类型和运算符。PHP支持整型、浮点型、字符串、布尔型、数组、对象、资源等数据类型。运算符包括算术、字符串、赋值、比较、逻辑、位、错误控制及范围运算符。通过示例展示了如何计算圆面积、判断素数和求斐波那契数列,以帮助读者更好地理解和应用这些概念。
40 2
|
6月前
|
Java 开发者
Java语言中的运算符深入解析
Java语言中的运算符深入解析
|
6月前
|
程序员 编译器 C语言
C语言运算符深入解析
C语言运算符深入解析
|
6月前
|
算法 Java
【Java探索之旅】运算符解析 算术运算符,关系运算符
【Java探索之旅】运算符解析 算术运算符,关系运算符
43 0
|
6月前
|
算法 程序员 C++
【Python 基础教程 运算符06】Python3运算符超详细解析:全面入门教程,初学者必读
【Python 基础教程 运算符06】Python3运算符超详细解析:全面入门教程,初学者必读
185 2
|
6月前
|
C++
C++ 运算符全解析:从基础概念到实际应用
C++中的运算符用于操作变量和值。算术运算符包括加减乘除取模,如`+`、`-`、`*`、`/`、`%`;赋值运算符如`=`、`+=`等,用于给变量赋值或合并赋值;比较运算符如`==`、`!=`、`<`、`>`等,用于比较值;逻辑运算符包括`&&`、`\|\|`、`!`,处理布尔逻辑。了解这些运算符对于C++编程至关重要。
61 0
|
6月前
|
C#
C运算符优先级深度解析:从新手到专家的代码实操之旅
C运算符优先级深度解析:从新手到专家的代码实操之旅
27 0
|
6月前
|
存储 Java 程序员
强制类型转换运算符的深入解析
在编程中,类型转换是一个常见的操作,它允许我们将一个数据类型转换为另一个数据类型。在某些情况下,编译器可以自动执行这种转换,称为隐式类型转换。但在其他情况下,需要程序员显式地指定转换,这就是所谓的强制类型转换。
33 0

推荐镜像

更多