проверка JavaScript, если словарь

У меня есть простая программа, как:

var a = {'a': 1, 'b': 2}
console.log(a)
console.log(a instanceof Array)
console.log(a.constructor instanceof Array)

Здесь значениеa это словарь. Я хочу проверить это.

Как я могу проверить в JavaScript. Мои оба теста выше дают мне ложное значение

Я новичок в JavaScript

 Rajesh11 июл. 2016 г., 12:19
У Javascript нет словаря. У него есть объект. Object и Array оба имеют тип object, поэтому, если вы хотите различить их, вы можете попробоватьArray.isArray, Это вернет true для массива и false для объектов

Ответы на вопрос(3)

Структура{'a': 1, 'b': 2} является объектом Javascript Его можно использовать как словарь, но у Javascript нет фактического типа словаря.

console.log(typeof a);            // "object"
console.log(Array.isArray(a));    // false, because it's not an array

Если вы хотите узнать, является ли что-то массивом, используйте:

Array.isArray(a)

Если вы хотите узнать, является ли объект объектом, используйте:

typeof a === "object"

Но вы должны быть осторожны, потому что массив также является объектом.

Если вы хотите узнать, является ли что-то простым объектом, вы можете посмотреть, что делает jQuery для обнаружения простого объекта:

isPlainObject: function( obj ) {
    // Not plain objects:
    // - Any object or value whose internal [[Class]] property is not "[object Object]"
    // - DOM nodes
    // - window
    if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
        return false;
    }

    // Support: Firefox <20
    // The try/catch suppresses exceptions thrown when attempting to access
    // the "constructor" property of certain host objects, ie. |window.location|
    // https://bugzilla.mozilla.org/show_bug.cgi?id=814622
    try {
        if ( obj.constructor &&
                !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
            return false;
        }
    } catch ( e ) {
        return false;
    }

    // If the function hasn't returned already, we're confident that
    // |obj| is a plain object, created by {} or constructed with new Object
    return true;
},
function isDict(v) {
    return typeof v==='object' && v!==null && !(v instanceof Array) && !(v instanceof Date);
}
 Floyd11 июл. 2018 г., 14:21
Ответ здесь решает эту проблему:stackoverflow.com/questions/38304401/... .
 Anderson Green20 апр. 2018 г., 06:04
Это не работает правильно во всех случаях. Если вход являетсяRegExpто выводtrue вместоfalse.

является ли что-то словарём в Javascript, таким образом, чтоне также вернутьсяtrue когда дан массив это:

if (a.constructor == Object) {
    // code here...
}

Это было вдохновлено ответомВот.

Ваш ответ на вопрос