有说服力的javascript示例和属性中字符串的用法

有说服力的javascript示例和属性中字符串的用法,javascript,properties,Javascript,Properties,我目前正在学习雄辩的Javascript,这是一个关于属性以及这些属性中字符串的用法的问题 我在第4章中看到两个对象: 及 问题:属性名是否需要像Jacques Journal对象中那样是字符串?或者它们可以仅仅作为事件和松鼠列在上面的对象中吗 在这两种情况下,此代码是否仍然有效: function tableFor(event, journal) { return journal.events.indexOf(event) } tableFor("pizza", JOURNAL) (

我目前正在学习雄辩的Javascript,这是一个关于属性以及这些属性中字符串的用法的问题

我在第4章中看到两个对象:

问题:属性名是否需要像Jacques Journal对象中那样是字符串?或者它们可以仅仅作为事件和松鼠列在上面的对象中吗

在这两种情况下,此代码是否仍然有效:

function tableFor(event, journal) {
return journal.events.indexOf(event)
}

tableFor("pizza", JOURNAL)    (notice that the JOURNAL object is found within the link provided)

每个人都用什么来测试大量缩进的Javascript代码?我试着在chrome中使用Dev工具,但不得不用空格键手动键入缩进,这很烦人。您能在Sublime文本中测试javascript代码吗?

首先,您的最后一个代码片段将抛出以下错误:

Uncaught TypeError: Cannot read property 'indexOf' of undefined
这是正确的,因为在
日志
数组中没有值为“pizza”的元素。数组中只有一些json对象。因此,您必须遍历所有对象以找出属性
squirrel
的值

类似这样的方法会奏效:

function tableFor(event, journal) {
    for(var i=0;i<journal.length;i++){
      if(journal[i].events.indexOf(event) > 0) return journal[i].squirrel;
    }
    return false;
}
函数表(事件、日志){
对于(var i=0;i0)返回日记帐[i]。squirrel;
}
返回false;
}
请记住,javascript中的所有内容都是一个对象,因此可以通过在数组对象上设置任意属性来“滥用”它。对数字索引数据使用数组,对非数字键使用对象

有关详细信息,请参阅此stackoverflow


有很多方法可以测试你的javascript。。。您可以在线(例如)或在浏览器的控制台中执行此操作。

首先,您的最后一个代码段将抛出以下错误:

Uncaught TypeError: Cannot read property 'indexOf' of undefined
var foo = { "bar": 123 };
这是正确的,因为在
日志
数组中没有值为“pizza”的元素。数组中只有一些json对象。因此,您必须遍历所有对象以找出属性
squirrel
的值

类似这样的方法会奏效:

function tableFor(event, journal) {
    for(var i=0;i<journal.length;i++){
      if(journal[i].events.indexOf(event) > 0) return journal[i].squirrel;
    }
    return false;
}
函数表(事件、日志){
对于(var i=0;i0)返回日记帐[i]。squirrel;
}
返回false;
}
请记住,javascript中的所有内容都是一个对象,因此可以通过在数组对象上设置任意属性来“滥用”它。对数字索引数据使用数组,对非数字键使用对象

有关详细信息,请参阅此stackoverflow

有很多方法可以测试你的javascript。。。您可以在线(例如)或在浏览器的控制台中执行此操作

var foo = { "bar": 123 };
上面两行JavaScript完全相同。在任何一种情况下,您都可以通过两种不同的方式访问
“bar”
属性:

console.log( foo.bar );     # => 123
console.log( foo["bar"] );  # => 123
当键不是有效的JavaScript标识符时,只需使用引号语法(
{“bar”:123}
)。致:

JavaScript标识符必须以字母、下划线(_)或美元符号($)开头;后续字符也可以是数字(0-9)。因为JavaScript是区分大小写的,所以字母包括字符“A”到“Z”(大写)和字符“A”到“Z”(小写)

从JavaScript 1.5开始,您可以使用ISO 8859-1或Unicode字母,例如标识符中的å和ü。您还可以使用\uxxx Unicode转义序列作为标识符中的字符

例如,这是有效的:

var obj = { "": 1,
            "!": 2,
            "foo bar": 3,
            "99bottles": 4 }
但如果没有引号,任何一个都会抛出错误

还有一个时候需要引号,那就是你想使用JavaScript中的保留字,比如
return
else
class
。有时候你可以做得很好:

var obj = { else: 123 }
console.log( obj.else ) # => 123
…但这取决于JavaScript解析器是否能够判断您将其用作属性名,而不是关键字。例如,如果您现在打开JavaScript控制台并键入:

{ else: 123 }
…你会得到一个SyntaxError。因此,当涉及到在JavaScript中具有特殊含义的单词时(有一个),最好使用引号:

var obj = { "else": 123 }
在硬币的另一面,也就是说,从你创造的物体中取出东西,故事大致相同。假设我们有这个对象:

var obj = { foo: 1,  // note that we can mix quoted and non-quoted if we want
            "": 2,
            "99bottles": 3,
            "else": 4,
            "foo bar": 5,
            $gt: 6 }
对于有效标识符的键,我们可以使用常规的“点表示法”访问属性,但对于其他键,我们必须使用“括号表示法”:

最后,值得注意的是,JSON是JavaScript的一个子集。这是有效的JavaScript,但不是有效的JSON对象:

{ foo: "bar" }
JSON属性名称周围需要引号。以下是有效的JSON:

{ "foo": "bar" }
上面两行JavaScript完全相同。在任何一种情况下,您都可以通过两种不同的方式访问
“bar”
属性:

console.log( foo.bar );     # => 123
console.log( foo["bar"] );  # => 123
当键不是有效的JavaScript标识符时,只需使用引号语法(
{“bar”:123}
)。致:

JavaScript标识符必须以字母、下划线(_)或美元符号($)开头;后续字符也可以是数字(0-9)。因为JavaScript是区分大小写的,所以字母包括字符“A”到“Z”(大写)和字符“A”到“Z”(小写)

从JavaScript 1.5开始,您可以使用ISO 8859-1或Unicode字母,例如标识符中的å和ü。您还可以使用\uxxx Unicode转义序列作为标识符中的字符

例如,这是有效的:

var obj = { "": 1,
            "!": 2,
            "foo bar": 3,
            "99bottles": 4 }
但如果没有引号,任何一个都会抛出错误

还有一个时候需要引号,那就是你想使用JavaScript中的保留字,比如
return
else
class
。有时候你可以做得很好:

var obj = { else: 123 }
console.log( obj.else ) # => 123
…但这取决于JavaScript解析器是否能够判断您将其用作属性名,而不是关键字。例如,如果您现在打开JavaScript控制台并键入:

{ else: 123 }
…你会得到一个SyntaxError。所以,当涉及到在JavaScript中有特殊含义的单词时(有一个),最好使用引号