regexp.exec(r.getValue())
这里arr [i]的值是Memory
var b = "pp.specifications.full_specs.";
var c = arr[i];
它在控制台上打印pp.specifications.full_specs.Memory
但是当我使用
时 var a = b+c;
console.log(a);
然后将json对象打印为:
console.log(pp.specifications.full_specs.Memory);
只要a的值包含pp.specifications.full_specs.Memory;
那么获得不同产出的原因是什么?
答案 0 :(得分:0)
b
是示例中的一个字符串,任何与字符串连接的内容(即:"" + {}
)都会产生一个字符串。 JavaScript将通过类型toString()
函数(Also known as Type Coercion)对字符串进行隐式类型转换。当对象通过.toString()
转换为字符串时,该字符串的值为[object Object]
。知道这一点,将字符串b
与对象c
连接起来会产生字符串。
"pp.specifications.full_specs.[object Object]"
console.log(pp.specifications.full_specs.Memory)
实际打印pp.specifications.full_specs.Memory
如果要将字符串与Object的实际字符串表示形式连接,请使用JSON.stringify()
获取对象的字符串化版本。我想这就是你想要做的事情。
let a = b + JSON.stringify(c, null, 2)
console.log(a)
// REPL output
pp.specifications.full_specs.{
"Series": "Inspiron",
"Model": "A562103SIN9",
"Utility": "Everyday Use",
"OS": "Windows 10 Home (64-bit)",
"Dimensions": "274.73 x 384.9 x 25.44 mm",
"Weight": "2.62 Kg",
"Warranty": "1 Year Onsite Warranty"
}
上面将输出一个b
的字符串,与c
的JSON表示相连,如上所述。上面的输出格式化,就好像它是在REPL的上下文中打印一样。在浏览器或文件上下文中,JSON.stringify(c, null, 2)
包括空格和新行的转义,如下所示。
' pp.specifications.full_specs。{\ n" Series":" Inspiron",&n" Model":" A562103SIN9& #34;,\ n"实用程序":"日常使用",\ n"操作系统":" Windows 10 Home(64位)&#34 34;,\ n"尺寸":" 274.73 x 384.9 x 25.44 mm",\ n"重量":" 2.62 Kg",#34; n"保修":" 1年现场保修" \ n}'
答案 1 :(得分:-1)
之间存在一个基本的区别
console.log(pp.specifications.full_specs.Memory);
和
console.log("pp.specifications.full_specs.Memory");
注意引号!
所以表达式:console.log(pp.specifications.full_specs.Memory);
可以从左到右阅读:
打印到pp.specifications.full_specs.Memory
的输出值,在获取其属性pp
然后其属性specifications
等后,这是full_specs
个对象的值。
而"pp.specifications.full_specs.Memory"
仅表示一段文字。
您的代码中发生的事情现在应该更加清晰:
// B is piece of text
var b = "pp.specifications.full_specs.";
// C is some other value - let's say also textual one
var c = arr[i]
// So b+c will mean add text to some other text
// It's expected that the result of such operations is concatenated text
// So then console.log(b+c) will mean
// Print the concatenated text from b and c
// And it's just plain text
console.log(b+c);
//It's the same as:
console.log("pp.specifications.full_specs.Memory");
// And this one means print some specific object attributes
// which is different operation!
console.log(pp.specifications.full_specs.Memory);
如果您想通过文本访问对象,可以执行以下操作:
var d = eval(b+c);
这是非常危险的,应避免使用eval但我只是想展示基本的想法。 Eval执行字符串就好像它们是代码一样。
所以字符串"pp.specifications.full_specs.Memory"
将作为实际对象的值进行求值(是的!)。
由于eval可以执行任何操作,因此应该始终避免它,而且它是超级的!
相反,如果你想在某些文字输入上访问某些pp
基本属性,你可以这样做:
pp['specifications']['full_specs']['Memory']
由于pp.x
表示法等同于表达式:pp['x']
我希望我的回答可以帮助您更好地理解Javascript机制:)