JS知识点补充
Posted 煜成'Studio
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS知识点补充相关的知识,希望对你有一定的参考价值。
标题连续赋值–赋值运算符运算顺序
淦!五行代码,难倒几十个前端群的小伙伴 - 掘金 (juejin.cn)
var a=n:1;
var b=a;
a.x = a = n: 2;
console.log(a.x); //?
console.log(b.x);//?
正确答案是:
a.x= undefined;
b.x= n: 2;
解析:
javascript中的引用赋值
js中对象的赋值其实是引用的赋值,只是将b对象的引用指针指向了a对象的引用。
1 var a=n: 1;
2 var b= a;
3 console.log(b.n); // 1
4 a.n=2;
5 console.log(b.n); // 2
赋值运算符的右结合
赋值运算符是从右向左运算的,例如 var a = 1 + 2; 先计算了等号右边1+2,将右边的结果3赋值给了a;
var a, b;
a=b=1+2;
其中按照赋值运算符的右结合的特质:
a = b = 1 + 2 等价于 a = (b= 1+2 )
其中 b 等于 1+2的返回值 3 ;
a 等于 b=3 的返回值 3;
赋值运算符运算顺序:从左到右
上面讲到赋值运算符是从右向左运算的,但是其运算顺序是从左往右的。也就是一开始提出的问题 a.x = a = n:2 是从左向右运算的(赋值是从右向左);也就是说程序的计算顺序是:
a.x
a
n:2
程序执行到 a.x = a = n:2 先执行a.x 并等待赋值符号“=”后面的运算返回值;然后执行a并等待赋值符号“=”后面的运算返回值。
于是:
var a=n:1;
var b=a;
a.x = a = n: 2;
-
变量a指向了一个对象n:1;
-
变量b指向了a的引用(其实就是n:1);
-
计算a.x并等待赋值符号“=”后面的运算返回值(此时,a指向的是n:1);
-
计算a并等待赋值符号“=”后面的运算返回值,注意这里将a的引用指向了n:2,这里赋值完还要返回第三步进行赋值
第一行代码
第二行代码
第三行代码
第二题:
function good()
var var1 = 1, var2 = 1, var3 = 1;
function bad()
var var1 = var2 = var3 = 1;
good();
console.log(window.var2); // undefined
bad();
console.log(window.var2); // 1
var var1 = 1, var2 = 1, var3 = 1;就是正常的在函数内部连续定义变量。
var var1 = var2 = var3 = 1;相当于var var1 = (var2 = (var3 = 1));先计算var var1 =,到这里等待后面的返回值,var2也是等待后面的返回值,var3 = 1是在全局定义了变量,var2同理也是全局定义的变量,而var var1 = 1是在函数内部定义的变量。
第三题:
function go()
let a=b=c=1;
go()
console.log(b)//1
console.log(c)//1
数组的indexOf includes find some map filter forEach
const nameArray = ['zhao', 'qian', 'li']
//数组也有indexOf和includes这两种方法
nameArray.indexOf('li') //返回index
nameArray.includes('li') //返回boolean
nameArray.find((value) =>
return value === 'li'
) //返回first value
nameArray.some((value) =>
return value === 'li'
) //返回boolean值
//数组的map和filter方法都有返回值,forEach方法没有返回值
var isEqual = require(‘lodash’)
console.log([] === []) //false
console.log( === ) //false
//因为一旦创建了,就确定了一个内存空间,内存空间是不一样的
var isEqual = require('lodash') //这个库有isEqual这个方法可以判断两个数组或者对象内部的值是否相等
console.log(isEqual(, )) //ture
JSON.stringify JSON.parse
console.log(obj) //key1: 'first', key2: 1
console.log(typeof obj) //object
const jsonString = JSON.stringify(obj)
console.log(jsonString) //"key1": "first", "key2": 1
console.log(typeof jsonString) //string
console.log(JSON.parse(jsonString)) //key1: 'first', key2: 1
以上是关于JS知识点补充的主要内容,如果未能解决你的问题,请参考以下文章