We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
>>=
>>>=
// 来自 高级前端面试 var a = {n: 1} var b = a // 此时b和a指向同一个对象 a.x = a = {n: 2} // a.x = a = {n: 2} 其实可以看成 b.x = a = {n: 2} // a.x 会给 a和b 当前共同指向的对象增加个 x 属性,此时属性值为 undefined a.x // undefined 即 b.x // 接下来是赋值,由于右边依然是个赋值语句, // 此时应该先拿到 a = {n: 2} 的赋值结果,然后将该结果在赋值给 b.x // 由于a指向改变,所以此时和b指向的不是同一个对象, // 但是b指向的对象其 x 属性指向a,所以b指向的对象的x会改变 { n: 1, x: { n: 2 } } console.log(a.x) // undefined console.log(b.x) // {n: 2}
当在 严格模式 中出现赋值时,如果在第一个算法的第一步或者第二个算法的第7步中 lref 是一个未解决的引用,则会引起运行时错误。会抛出 ReferenceError 异常。左侧表达式 不能是一个 { [[Writable]]: false } 的 数据属性 引用,不能是一个 { [[Set]]: undefined } 的 访问器属性 引用,也不能是对一个不可扩展对象(该对象的 IsExtensible 返回 false)的引用。如果出现以上情况,会抛出 TypeError 异常。
伴随参数 value。
{ 赋值属性列表 }
{ 赋值属性列表, }
这里应该是普通的数组赋值
[] = [1]
[, , ] = [1, 2, 3];
[, a] = [1, 2]; console.log(a); // 2
[a, b, c] = [1, 2, 3]; console.log(a); // 1 console.log(b); // 2 console.log(c); // 3
[a, b, , ...c] = [1, 2, 3, 4, 5]; console.log(a); // 1 console.log(b); // 2 console.log(c); // [4, 5]
({...rest} = {a: 1, b: 2}); console.log(rest); // {a: 1, b: 2}
({a, ...rest} = {a: 1, b: 2, c: 3}); console.log(a); // 1 console.log(rest); // {b: 2, c: 3}
伴有参数value
注意:以下操作收集所有已解构的属性名称的列表。
var o = {p: 42, q: true}; var {p, q} = o; console.log(p); // 42 console.log(q); // true
var a, b; ({a, b} = {a: 1, b: 2}); console.log(a); // 1 console.log(b); // 2 var o = {p: 42, q: true}; var {p: foo, q: bar} = o; console.log(foo); // 42 console.log(bar); // true
let key = "z"; let { [key]: foo } = { z: "bar" }; console.log(foo); // "bar"
伴有参数 value 和 excludedNames
let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40} a; // 10 b; // 20 rest; // { c: 30, d: 40 }
赋值剩余属性 : ... 解构赋值目标对象
比较长,省略。。。
伴有参数 value 和 propertyName
赋值元素 : 解构赋值目标对象 初始化器opt
// 来自高级前端面试 const myFunc = ({x, y, z}) => { console.log(x, y, z) } myFunc(1, 2, 3) // undefined undefined undefined A. 1 2 3 B. {1: 1} {2: 2} {3: 3} C. {1: undefined} undefined undefined D. undefined undefined undefined
这题不难,但是我容易迷糊,说到底是基础不够牢。
// 来自高级前端面试,我选错了 const spookyItems = [1, 2, 3]; ({item: spookyItems[3]} = {item: 4}); console.log(spookyItems) // 选B A. [1, 2, 3] B. [1, 2, 3, 4] C. [1, 2, 3, {item: 4}] D. [1, 2, 3, "[object Object]"]
我知道会拿到 4 这个值,但没想到会把它放进数组里!
The text was updated successfully, but these errors were encountered:
No branches or pull requests
赋值运算符(包括解构赋值)、逗号运算符
赋值运算符
>>=
>>>=
运行时语义:求值
赋值表达式 : 左侧表达式 = 赋值表达式
赋值表达式 : 左侧表达式 赋值运算符 赋值表达式
解构赋值
解构赋值求值
伴随参数 value。
对象赋值模式 : { }
对象赋值模式 :
{ 赋值属性列表 }
{ 赋值属性列表, }
数组赋值模式 : [ ]
数组赋值模式 : [ 忽略 ]
数组赋值模式 : [ 忽略opt 赋值剩余元素 ]
数组赋值模式 : [ 赋值元素列表 ]
数组赋值模式 : [ 赋值元素列表, 忽略opt 赋值剩余元素opt ]
对象赋值模式 : { 赋值剩余属性 }
对象赋值模式 : { 赋值属性列表, 赋值剩余属性 }
PropertyDestructuringAssignmentEvaluation
赋值属性列表 : 赋值属性列表, 赋值属性
赋值属性 : 标识符引用 初始化器opt
赋值属性 : 属性名 赋值元素
RestDestructuringAssignmentEvaluation
赋值剩余属性 : ... 解构赋值目标对象
IteratorDestructuringAssignmentEvaluation
比较长,省略。。。
KeyedDestructuringAssignmentEvaluation
赋值元素 : 解构赋值目标对象 初始化器opt
2020-03-20 补充
这题不难,但是我容易迷糊,说到底是基础不够牢。
2020-03-26 补充
我知道会拿到 4 这个值,但没想到会把它放进数组里!
The text was updated successfully, but these errors were encountered: