补充@markmoxx 所说的,截至目前(形成未来!),我们有了新的解构方式。我们现在可以在解构语句中重命名和分配默认值。想一想:
let obj = {a,: 5, b: 6, c: [7,8],d:[9,10]e: {f: 11, g: 12}};
let {a: first, b: second, c: arr, d: [innerFirst, innerSecond], e: {f: objFirst, g: objSecond}, h = "default1", i: [defaultArr1 = "default2", defaultArr2 = "default3"], j: {k: objDefault1 = "default4"} } = obj;
console.log(first, second, arr, innerFirst, innerSecond, objFirst, objSecond, h, defaultArr1,defaultArr2, objDefault1);
// This outputs:
5, 6, [7,8],9,10,11,12,"default1","default2","default3","default4"
所以,现在我们可以更好地控制解构赋值。
编辑:一致
PHP 的列表函数主要用于数组(大部分)。在那,有一些奇怪的行为(反向分配取决于 php 版本等)。 javascript中的解构是不同的。即使使用上面的重命名语法,您仍然需要知道对象键/数组索引。此外(这可能是一个偏好问题,但是),javascript 中的解构具有更大的功能,因为数组和对象都可以被解构到任何嵌套深度,同时允许您重命名和分配默认值。但请注意,因为解构很容易失控。考虑这个过度解构的例子:
const NameView = ({context: { state: [ state, update ], id, display: {tag, size = 32, type = "text", style: { wrapper: outerouter = "card", content: innerouter = "content", banner: {wrapper: outerinner = "title",content: innerinner = "content"} } } } }) => (
<div className={outerouter}>
<input className={innerouter} type={type} maxlength={size} size={size} value={name} id={id} name={id} onChange={(e) => update(e.target.value)}/>
<div className={outerinner}>
<label for={id} className={innerinner}>{tag}</label>
</div>
</div>
)