冗长的javascript示例和字符串在属性中的用法
Eloquent javascript example and usage of strings in properties
我目前正在学习Eloquent Javascript,这是一个关于属性和这些属性中字符串使用的问题。
我在看第4章中的两个对象:
http://eloquentjavascript.net/code/jacques_journal.js
和
var journal = [
{events: ["work", "touched tree", "pizza",
"running", "television"],
squirrel: false},
{events: ["work", "ice cream", "cauliflower",
"lasagna", "touched tree", "brushed teeth"],
squirrel: false},
{events: ["weekend", "cycling", "break",
"peanuts", "beer"],
squirrel: true},
/* and so on... */
];
问题:属性名称是否需要像JacquesJournal对象中那样是字符串?或者它们可以在上面的对象中被列为事件和松鼠吗?
在任何一种情况下,这个代码仍然有效吗:
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 Text中测试javascript代码吗?
var foo = { "bar": 123 };
var foo = { bar: 123 };
上面两行JavaScript完全等效。在任何一种情况下,您都可以通过两种不同的方式访问"bar"
属性:
console.log( foo.bar ); # => 123
console.log( foo["bar"] ); # => 123
只有当键不是有效的JavaScript标识符时,才需要使用引号语法({ "bar": 123 }
)。引用MDN:
JavaScript标识符必须以字母、下划线(_)或美元符号($)开头;后续字符也可以是数字(0-9)。由于JavaScript区分大小写,字母包括字符"A"到"Z"(大写)和字符"A"到"Z"(小写)。
从JavaScript1.5开始,您可以在标识符中使用ISO8859-1或Unicode字母,如å和ü。您也可以使用''uXXXX 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 }
对于有效标识符的密钥,我们可以使用常规的"点符号"来访问属性,但对于其他密钥,我们必须使用"括号符号":
obj.foo # => 1
obj[""] # => 2
obj.99bottles # => SyntaxError: Unexpected token ILLEGAL
obj["99bottles"] # => 3
obj.else # => 4
obj["foo bar"] # => 5
obj.$gt # => 6
最后,值得注意的是,JSON是JavaScript的子集。这是有效的JavaScript,但它不是有效的JSON对象:
{ foo: "bar" }
JSON属性名称周围需要引号。以下是有效的JSON:
{ "foo": "bar" }
首先,您的最后一个代码片段将抛出以下错误:
Uncaught TypeError: Cannot read property 'indexOf' of undefined
这是正确的,因为在journal
数组中没有值为"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;
}
请记住,javascript中的所有内容都是一个对象,因此您可以通过设置任意属性来"滥用"Array对象。对数字索引数据使用Array,对非数字键使用对象。
更多信息在此堆叠后
有很多方法可以测试您的javascript。。。您可以在线(例如jsfiddle)或在浏览器中的控制台中执行此操作。
- 如何替换数据属性中的特定字符串单词
- 未捕获的InvalidValueError:setIcon:不是字符串;并且没有url属性;并且没有路径属性
- 如何在只接受字符串值/文字的HTML属性中调用函数
- 获取一个对象´s属性的名称使用字符串
- 如何从字符串变量访问对象属性
- 将属性作为字符串存储在变量中
- 作为onclick确认的一部分,Razor中的字符串属性
- 无法获取属性'字符串'的未定义或null引用IE 11 ASP.NET
- Javascript将数组中对象的属性转换为字符串
- 使用变量访问 JSON 属性(字符串)
- 如何在 html 属性字符串中使用 JavaScript 变量
- 根据当前属性值更改属性字符串
- 拆分属性字符串并附加额外的文本
- 如何循环遍历嵌套对象,使用for in循环并返回连接的每个属性字符串
- 在对象上设置属性字符串Javascript
- 用JavaScript设置CSS属性字符串
- 如何用属性字符串化Javascript函数对象
- 如何替换 html 标记属性字符串中的多个“<”和“>”
- Javascript对象属性:字符串或整型
- 从属性字符串运行函数