Skip to content
New issue

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

Go Slices don't report length as an own property #328

Closed
mstoykov opened this issue Sep 12, 2021 · 0 comments
Closed

Go Slices don't report length as an own property #328

mstoykov opened this issue Sep 12, 2021 · 0 comments
Labels

Comments

@mstoykov
Copy link
Contributor

Original report to the k6 project.

The original issues used to work in k6 until the es6 merge at which point it stopped but it only works for []interface{} which is what happens when you just unmarshal an array from json (the original use case). Even before the es6 branch this didn't work for anything else, but I would argue that ... they should especially as if you access length it is obviously there.

A simple reproducible test

        vm := New()
        s := []interface{}{2, 3, 4}
        vm.GlobalObject().Set("s", vm.ToValue(s))
        fmt.Printf("%#v\n", vm.ToValue(s))
        v, err := vm.RunString(`s.hasOwnProperty("length")`)
        if err != nil {
                t.Fatal(err)
        }
        fmt.Println(v) // this should be true but it's false unless you go back to 1f8a2ffe986ff105e41a12cc8b82857c3e1c2d44

For the record this only works because this resolves to using objectGoSlice not objectGoSliceReflect, which also doesn't work. And no actual combination seems to work currently :(.

@dop251 dop251 closed this as completed in ac5354e Sep 12, 2021
@dop251 dop251 added the bug label Sep 12, 2021
Gabri3l added a commit to mongodb-forks/goja that referenced this issue Feb 4, 2022
…formats, ... (#47)

* Fixed typed arrays' defineProperty and indexing. Fixes dop251#308.
* Fix Proxy creation panicing on target not callable
* Do not modify sb for variadic calls as it breaks local variables resolution. Instead place a marker on stack and use it to count the number of args. Fixes dop251#311.
* Support patterns in catch clause. See dop251#305
* Fixed the handling of Symbol properties in destructuring assignments. Fixes dop251#312.
* Ensure ToPropertyKey happens earlier when assigning computed keys. Fixes dop251#312.
* Aligned detached buffer semantics with the latest specs. Fixes dop251#315.
* More typed arrays fixes
* Fixed accessor and property key function names. Fixes dop251#314.
* Fixed possible panic when sorting non-standard arrays.
* Added nil-safety checks for values returned by get*() methods
* Fixed panics in parser on some invalid inputs. Fixes dop251#318.
* Arrow function (dop251#319)
* Implemented arrow functions. See dop251#304.
* Define the name property for anonymous functions (including arrow functions)
* Treat "arguments" as a lexical binding to match the latest specification
* Allow arrow functions to contain 'use strict' for simple parameter lists. Fixes dop251#323.
* Fixed argument variable reference resolution in stashless functions
* Treat date-only formats as UTC and date-time as local timezone. Added support for additional datetime formats. Fixes dop251#281, fixes dop251#292.
* Use correct createArgsRest variant when arguments are not in stash. Fixes dop251#327
* Fixed formatting for go 1.17
* Report 'length' as own property for Go slices. Fixes dop251#328.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants