Что эта строка представляет как объект Javascript? - PullRequest
0 голосов
/ 23 сентября 2011

Учитывая следующие данные, подаваемые в движок JavaScript (например, Rhino):

{
  hello=66.66,
  whygod=sun.org.mozilla.javascript.internal.NativeArray@7ba28183,
  sku=[2490748],
  world=sun.org.mozilla.javascript.internal.NativeArray@69e4fede,
  price=[]
}

1) Какие типы объектов sku = [2490748] и price = [] представлены в javascript?

Я бы подумал, что это массивы, но это не так, потому что, когда я запускаю следующую логику как часть движка javascript, который обрабатывает эти данные, цена не удаляется:

    function doStuff(row) {
        var price = row.get( 'price' );
        if ( price == null ||
             price == '' ||
             price.length == 0)
        {
            row.remove( 'price' );
        }
        return row;
    }

2) Так что же, есть идеи?

Ответы [ 2 ]

0 голосов
/ 23 сентября 2011

На стороне java перед передачей в движок javascript для rhino я обнаружил, что price = [] - это отображение ключа с именем price на объект ArrayList только с одним пустым строковым объектом.

Впоследствии выплевывание пар ключ / значение объекта цены на стороне javascript показало мне, что на самом деле это не был какой-либо стандартный тип объекта javascript !

Я выплюнул и цену , которая должна была содержать пустую строку, и sku . Теперь, по крайней мере, sku должно было иметь значение 2490748 где-то в дампе карты ключ / значение, но это не так! Вздох ... не знаю, как сработать.

Кроме свойства empty: false ничто не кажется полезным. Но я подумал, что это заслуживает упоминания:

= * ы * 1022

пусто: false

indexOf: функция indexOf () {/ * int indexOf (java.lang.Object) * /}

notifyAll: функция notifyAll () {/ * void notifyAll () * /}

removeAll: функция removeAll () {/ * логическое значение RemoveAll (java.util.Collection) * /}

trimToSize: функция trimToSize () {/ * void trimToSize () * /}

содержит все: функция содержит все () {/ * логическое значение containsAll (java.util.Collection) * /}

содержит: функция содержит () {/ * логическое содержит (java.lang.Object) * /}

равно: функция равно () {/ * логическое значение равно (java.lang.Object) * /}

notify: функция notify () {/ * void notify () * /}

subList: function subList () {/ * java.util.List subList (int, int) * /}

класс: класс java.util.ArrayList set: функция set () {/ * java.lang.Object set (int, java.lang.Object) * /}

isEmpty: функция isEmpty () {/ * логическое значение isEmpty () * /}

add: function add () {/ * void add (int, java.lang.Object) логический добавить (java.lang.Object) * /}

sureCapacity: функция sureCapacity () {/ * void sureCapacity (int) * /}

size: function size () {/ * int size () * /}

iterator: function iterator () {/ * java.util.Iterator iterator () * /}

clear: function clear () {/ * void clear () * /}

wait: функция wait () {/ * void wait () void wait (long) void ждать (долго, целый) * /}

listIterator: функция listIterator () {/ * java.util.ListIterator listIterator (int) java.util.ListIterator listIterator () * /}

retainAll: функция retainAll () {/ * логическое значение retainAll (java.util.Collection) * /}

toString: function toString () {/ * java.lang.String toString () * /}

hashCode: function hashCode () {/ * int hashCode () * /}

toArray: function toArray () {/ * java.lang.Object [] toArray (java.lang.Object []) java.lang.Object [] toArray () * /}

lastIndexOf: функция lastIndexOf () {/ * int LastIndexOf (java.lang.Object) * /}

addAll: функция addAll () {/ * логический addAll (java.util.Collection) логическое addAll (int, java.util.Collection) * /}

clone: ​​function clone () {/ * java.lang.Object clone () * /}

get: function get () {/ * java.lang.Object get (int) * /}

getClass: function getClass () {/ * java.lang.Class getClass () * /}

remove: функция remove () {/ * java.lang.Object remove (int) boolean удалить (java.lang.Object) * /}

0 голосов
/ 23 сентября 2011

Если это функциональный блок, очерченный внешними скобками, как в этом:

function init()
{
  hello=66.66
  whygod=sun.org.mozilla.javascript.internal.NativeArray@7ba28183,
  sku=[2490748],
  world=sun.org.mozilla.javascript.internal.NativeArray@69e4fede,
  price=[]
}

тогда:

sku=[2490748] 

присваивает массив длины 2490748 переменной sku. Чтобы знать наверняка, нам нужно увидеть немного больше контекста вокруг кода, который вы представили. Вы можете увидеть некоторые диагностические данные для случая sku в этом jsFiddle: http://jsfiddle.net/KFgwF/.

Если sku не определен в локальной области, то он неявно объявляется как глобальная переменная (потому что перед ней нет var.

price=[]

присваивает пустой массив цене.


Редактировать на основе вашего комментария:

Если вы ожидаете, что это будет структура данных, которая будет передана функции:

{
  hello=66.66
  whygod=sun.org.mozilla.javascript.internal.NativeArray@7ba28183,
  sku=[2490748],
  world=sun.org.mozilla.javascript.internal.NativeArray@69e4fede,
  price=[]
}

Тогда это просто недопустимый javascript. Чтобы это было допустимым объявлением структуры данных, оно должно выглядеть так:

{
  hello: 66.66,
  whygod: "sun.org.mozilla.javascript.internal.NativeArray@7ba28183",
  sku: [2490748],
  world: "sun.org.mozilla.javascript.internal.NativeArray@69e4fede",
  price: []
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...