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;
  1. 变量a指向了一个对象n:1;

  2. 变量b指向了a的引用(其实就是n:1);

  3. 计算a.x并等待赋值符号“=”后面的运算返回值(此时,a指向的是n:1);

  4. 计算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知识点补充的主要内容,如果未能解决你的问题,请参考以下文章

JS知识点补充

JS知识点补充

基本数据类型(待补充)

JS 知识点补充

JS知识点补充

Vue ---- vue的基本使用 文本/事件/属性指令 补充: js面向对象 js函数