JavaScript中逗号运算符和this

遇到一道题目,写出下面的输出:

结果如下:

第一个是child‘s name没有问题,第二个指定的也是child,依然是child‘s name,第三个和第二个实际上是一样的,(parentObj.child=parentObj.child)相当于(parentObj.child),都是函数名,第四个又是什么鬼呢。

逗号运算符是很少见的,查了资料才知道,使用逗号运算符时,先计算左操作数的值,再计算右操作数的值,最后返回右操作数的值。因此,(parentObj.child,parentObj.child)和前三个都是一样的。逗号运算符的优先级在JavaScript中是最低的,如果使用要用括号包起来,不然容易出错。然而,我觉得逗号运算符很少被使用。

再看一个在网上找的例子了解this的用法:

结果是

fn();之后为什么this.length是10呢,因为fn这个函数是在全局定义的,fn函数的this指向的是Window,如你所见。

大道理我都懂,arguments[0]();又是什么鬼?

arguments是JavaScript的一个内置对象,注意它并不是一个数组,而是对象。

所以arguments[0]是想找到key为0的value,这个value就是函数名fn,因为它是第一个参数,好了,那这里fn的this就只能指向argument了,因为fn本身没有length这个变量,往外面找就找到arguments了。arguments里面有个length属性,不信我展开最后的function给你看:

好了,真相大白,此时this.length为1,length表示的应该就是参数的个数了,这里只有fn,为1

时间: 2024-10-14 00:18:35

JavaScript中逗号运算符和this的相关文章

JavaScript中的运算符

JavaScript中的运算符,JavaScript是具有全范围的运算符,包括算术.逻辑.位.赋值以及其他某些运算符. 计算逻辑位运算赋值杂项 描述符号描述符号描述符号描述符号描述符号 负值-逻辑非!按位取反~赋值=删除deletewww.mlybyby.com 递增++小于<按位左移<<运算赋值oP=typeof 运算符typeof 递减--大于>按位右移>>voidvoid 乘法*小于等于<=无符号右移>>>instanceofinstanc

JavaScript中“typeof”运算符与“instanceof”运算符的差异

在JavaScript中,运算符“typeof”和“instanceof”都可以用来判断数据的类型,那么这两个运算符有什么不同之处呢? 差异一:使用方式不同. 最明显的差异就是这两个运算符的使用方式了.“typeof”是一元运算符,其后直接跟需要进行类型判断的数据:而“instanceof”是二元运算符,其左侧是需要判断的数据,右侧是用于比较的类型. //typeof是一元运算符: var amount = 108; console.log(typeof amout);//控制台输出“numbe

c语言中逗号运算符和逗号表达式

原文:c语言中逗号运算符和逗号表达式 C语言提供一种特殊的运算符——逗号运算符.用它将两个表达式连接起来.如: 3+5,6+8 称为逗号表达式,又称为“顺序求值运算符”.逗号表达式的一般形式为 表达式1,表达式2 逗号表达式的求解过程是:先求解表达式1,再求解表达式2.整个逗号表达式的值是表达式2的值.例如,上面的逗号表达式“3+5,6+8”的值为14.又如,逗号表达式 a=3*5,a*4对此表达式的求解,读者可能会有两种不同的理解:一种认为“3*5,a*4” 是一个逗号表达式,先求出此逗号表达

JavaScript学习系列7 -- JavaScript中的运算符

今天,我们来说一说JavaScript中的运算符,首先我们来讲一讲 一元运算符 JavaScript中的一元运算符有以下几种 1. delete delete 运算符主要用于删除对以前定义的对象属性或者方法的引用, 举个例子如下 var myObj = new Object(); // 这一句和 var myobj = new Object(); 等价 myObj.name = "Luke"; alert(myObj.name); // 输出 "Luke" dele

javascript中算术运算符规则

javascript中提供了几种算术运算符,+(加)  -(减)  *(乘)  /(除)  %(余),常规用法与数学上的一致:  但还规定一些特殊规则: 注:JavaScript中保存数值的方式,可以保存正零(+0)和负零(-0):正零与负零被认为相等. 乘性操作符(*): 如果结果太大或太小,那么生成的结果是 Infinity 或 -Infinity. 如果某个运算数是 NaN,结果为 NaN. Infinity 乘以 0,结果为 NaN Infinity 乘以 0 以外的任何数字,结果为 I

javascript中关系运算符的说明

决定javascript语法的部分叫做ECMAScript,JavaScript的语法相比较java来说宽松了很多,同时也复杂了很多.在ECMAscript中进行关系符运算时,经常会遇到各种类型转换,大部分的类型转换都是自发的,在应用不同的操作符进行转换时,数据类型的转换又会有所不同. javascript中的关系运算符包括'>','<','>=','<='. 当两个做比较的操作数都是数字的时候,直接进行比较(当然了,这是废话). 当两个操作数都是字符串的时候,比较字符串对应的字符

javascript中new运算符

创建一个用户自定义的对象需要两步: 1.通过编写函数,来定义对象类型. 2.通过new来创建对象实例. new的工作流程: 1.创建一个空对象(var obj = {};) 2.使该空对象继承于构造函数的原型(obj.__proto__ = Foo.prototype;) 3.使用指定的参数调用构造函数 Foo ,并将 this 绑定到新创建的对象.(Foo.call(obj, x, y, z);) 4.由构造函数返回的对象就是 new 表达式的结果.如果构造函数没有显式返回一个对象,则使用步骤

JavaScript中instanceof运算符的用法以及和typeof的区别

instanceof : 为判断一个对象是否为某一数据类型,或一个变量是否为一个对象的实例;返回boolean类型栗子①: <script type="text/javascript"> var aColors = ["red", "green", "blue"]; alert(typeof aColors[0]); //output "string" alert(aColors[0] inst

javaScript中&quot;==&quot;和&quot;===&quot;运算符的区别

相同点: 两个运算符均可用于比较两个值是否相等,可允许操作任意类型的操作数,如果操作数相等则返回true,否则返回false. 不同点: "==="运算符也称为严格相等运算符,它用来检测两个操作数是否严格相等.该运算符首先计算其操作数的值,然后比较这两个值,比较过程中并不会首先对操作符进行任何类型转换. "=="运算符称为相等运算符,用来检测两个操作数是否相等,这里“相等”的定义非常宽松,可以允许进行类型转换.相等运算符"=="和"==