JavaScript中的冒号(:)表示什么?

18 javascript

这可能是一个愚蠢的noob问题,但是:在以下上下文中表示:

var stuffToDo = {
    'bar' : function() {
        alert('the value was bar -- yay!');
    },

    'baz' : function() {
        alert('boo baz :(');
    },

    'default' : function() {
        alert('everything else is just ok');
    }
};

if (stuffToDo[foo]) {
    stuffToDo[foo]();
} else {
    stuffToDo['default']();
}
Run Code Online (Sandbox Code Playgroud)

它是否将函数存储到每个变量中?

Fel*_*ing 35

这是一个对象文字 [MDN]:

var obj = {
    key: value
};

// obj.key === value; // true
Run Code Online (Sandbox Code Playgroud)

它指定value一个属性keyobj.虽然对于value可以是什么没有限制(好吧,它必须是可分配的东西),但是存在以下限制key:它必须是标识符名称,字符串文字或数字文字.

更多细节可以在ECMAScript规范的第11.1.5节中找到.

字面符号类似于:

var stuffToDo = {}; // <-- empty object literal

stuffToDo.bar = function() {...};
// or stuffToDo['bar'] = ...

stuffToDo.baz = function() {...};
// or stuffToDo['baz'] = ...
Run Code Online (Sandbox Code Playgroud)

最大的区别在于,在使用对象文字时,您无法在声明期间访问对象的其他属性.

这不起作用:

var obj = {
    foo: value,
    bar: obj.foo
};
Run Code Online (Sandbox Code Playgroud)

这样做:

var obj = {};
obj.foo = value;
obj.bar = obj.foo;
Run Code Online (Sandbox Code Playgroud)

为了完整起见,JavaScript中还有两种冒号用法: