【问题标题】:How to "dereference" an object?如何“取消引用”一个对象?
【发布时间】:2019-05-07 07:50:33
【问题描述】:

在 JavaScript 中,如何取消引用函数返回的对象?

例如:

var tmp = getTextProperties();
font   = tmp.font;
size   = tmp.size;
color  = tmp.color;
bold   = tmp.bold;
italic = tmp.italic;

PHP 有 list() 结构,它做类似的事情:

list($font, $size, $color, $bold, $italic) = getTextProperties();

【问题讨论】:

  • 根据您的问题,getTextProperties() 返回一个对象,而不是数组。
  • @billynoah 不是重复的,因为您刚才所说的原因 - 这个问题是关于对象,而不是数组。我还提交了对此问题的修改
  • @markmoxx - imo,欺骗问题提出了同样的问题,尽管它的答案确实无法解决对象。我认为在此处添加您的答案更有价值 - 看起来您已经完成并为此 +1。

标签: javascript php


【解决方案1】:

补充@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>
)

【讨论】:

    【解决方案2】:

    使用 ES6,您可以按如下方式解构对象:

    var { font, size, color, bold, italic } = getTextProperties();
    

    JavaScript Destructuring assignment

    【讨论】:

    • 你应该将这个答案添加到链接中 - 我不相信它在那里被提及并且这个可能会被关闭
    • @billynoah 谢谢,刚刚添加。
    • @billynoah 我删除了它,因为我意识到它不是在问同样的问题。在 PHP 的 list() 函数中,您指定要为其分配值的变量名称。在 JS 的解构中,你必须指定在你正在解构的对象中已经存在的变量名。
    • @billynoah ...这是解引用和解构之间的明确区别。
    • 我明白你的意思,但不确定这对任何一个问题都很重要。由于这个明确提到“取消引用”并要求类似于list() 的内容,所以这对我来说似乎是个骗局。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多