Sitelet https://github.com/nodejs/node/issues/15159
Skip to content

Doubled array entry using index '' in node v8.4.0 #15159

Description

@lucaelin

As of node v8.4.0, assigning a value to the array index '' causes a duplicate entry to be created. The duplicate disappears (and cannot be recreated) as soon as a value is assigned to a numerical index.

let x = [];
x[''] = 'foo';
console.log(x); 
// [ '': 'foo', '': 'foo' ]

console.log(x[0]); 
// undefined
x[0] = 'bar';
console.log(x);
// [ 'bar', '': 'foo' ]

x[''] = 'baz';
console.log(x);
// [ 'bar', '': 'baz' ]

Activity

  1. TimothyGu commented on Sep 3, 2017

    @TimothyGu
    Member

    This is because of a bug when printing the array, not because the array actually has a duplicated property.

    /cc @BridgeAR

  2. added
    utilIssues and PRs related to the built-in util module.
    on Sep 3, 2017
  3. keangkai commented on Sep 3, 2017

    @keangkai

    I think array is duplicate but I'm not sure

  4. mscdex commented on Sep 3, 2017

    @mscdex
    Contributor

    It's not possible to have duplicate keys for normal JS objects like that (the "exception" being Map instances), so if anything there is a bug in util.inspect() as @TimothyGu mentioned.

  5. self-assigned this
    on Sep 3, 2017
  6. targos commented on Sep 3, 2017

    @targos
    Member

    I'm looking at this

  7. targos commented on Sep 3, 2017

    @targos
    Member

    Well, actually it seems to be already fixed on master. Can someone else confirm?

  8. benjamingr commented on Sep 3, 2017

    @benjamingr
    Member

    @targos looks fixed in master on macOS:

    ~/Documents/OpenSource/node [master] $ ./out/Release/node
    > var a = []
    undefined
    > a[''] = 'foo'
    'foo'
    > console.log(a)
    [ '': 'foo' ]
    undefined
    > 
    (To exit, press ^C again or type .exit)
    > 
    ~/Documents/OpenSource/node [master] $ node -v
    v8.4.0
    ~/Documents/OpenSource/node [master] $ node
    > var a = []
    undefined
    > a[''] = 'foo'
    'foo'
    > console.log(a)
    [ '': 'foo', '': 'foo' ]
    undefined
    > 

    Thanks for the report @chancho4321 this bug appears to have been fixed already - thanks anyway, reporting was the right thing to do :)

  9. TimothyGu commented on Sep 3, 2017

    @TimothyGu
    Member

    That's great to hear! We should make sure to have a test case for it if one doesn't yet exist.

  10. BridgeAR commented on Sep 3, 2017

    @BridgeAR
    Member

    This got fixed by 3a886ff. Thanks for the report as this is a interesting edge case. It could only happen if the array contained a empty string as key and no regular entry. As @TimothyGu pointed out it would be nice to add a additional test case.

    Therefore I am adding the good first contribution label.

  11. added
    testIssues and PRs related to Node.js core tests and test infrastructure.
    and removed on Sep 3, 2017
  12. mscdex commented on Sep 3, 2017

    @mscdex
    Contributor

    @addaleax Shouldn't this still be tagged with 'v8.x' since that is where the issue still occurs (the aforementioned commit is not present in either the 'v8.x-staging' or 'v8.x' branches)?

  13. addaleax commented on Sep 3, 2017

    @addaleax
    Member

    @mscdex I can only speak for me, but as somebody who put together a number of the previous v8.x releases, having that label on issues that were also affecting master (which is our implied default, iirc) is confusing, because it gives the impression that some special care is needed for that release line. Unlike with LTS, we land anything in v8.x that also landed in master and is not semver-major by default, so this wouldn’t have been forgotten. Other releasers might disagree, and I’m not saying that I’m right about this being the best approach.

    (It’s totally fine to add that label for bugs in LTS, or for bugs that only occur in specific release lines, of course.)

  14. removed their assignment
    on Sep 4, 2017
  15. Trott commented on Sep 8, 2017

    @Trott
    Member

    There's a PR open for this so I'm removing the good first contribution label.

  16. removed
    good first issueIssues that are suitable for first-time contributors.
    on Sep 8, 2017
  17. BridgeAR commented on Sep 11, 2017

    @BridgeAR
    Member

    Fixed by 21a3ae3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    testIssues and PRs related to Node.js core tests and test infrastructure.utilIssues and PRs related to the built-in util module.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions