Javascript parse将数字视为有效的Json对象的字符串
此代码返回falseJavascript parse将数字视为有效的Json对象的字符串,javascript,json,Javascript,Json,此代码返回false const isJson = ( str ) => { try { var res = JSON.parse( str ); } catch ( e ) { return false; } return true; }; console.log(isJson('W-11')); 这是真的 需要知道为什么json.parse将纯数字视为有效的json字符串,而将带有字符的字符串视为无效的json。如果
const isJson = ( str ) => {
try {
var res = JSON.parse( str );
} catch ( e ) {
return false;
}
return true;
};
console.log(isJson('W-11'));
这是真的
需要知道为什么json.parse将纯数字视为有效的json字符串,而将带有字符的字符串视为无效的json。如果是新手问题,我会道歉
const isJson = ( str ) => {
try {
var res = JSON.parse( str );
} catch ( e ) {
return false;
}
return true;
};
console.log(isJson('123'));
是一个有效的JSON文本值。JSON支持数字文本,这是一个
111
这是无效的JSON。字符W
和-
在JSON规范中没有任何意义(嗯,-
将是负数文本的一部分,但无论如何……)。如果您想要形成JSON字符串文字,这将是一个:
W-11
因此:
Javascript字符串的内容必须是有效的JSON
W-11
不是JSON的字符串,只有“W-11”
是。如果希望“W-11”
像这样工作,请在isJSON
函数中传递它
如果它是双引号
,那么它是一个字符串,否则它是一个数字
,布尔值
,空值
,是一些数据结构(通常是数组或对象)的文本表示,但字符串、数字和布尔值等原始值也可以编码为JSON(并成功解码)
假设要解码的两个字符串都是有效的JSON,则生成它们的代码应该如下所示:
JSON.parse('"W-11"') // ok
如果您试图运行此代码,则语句y=W-11
将触发一个(“W未定义”)。或者,如果定义了
W
变量,W-11
是一个减法,试图将W
转换为一个数字,结果是一个数字(或)
无论哪种方式,都不可能使用生成W-11
(因为它不是有效的JSON)。您可能需要解析字符串“W-11”
,并将W-11
作为编码后生成它的值:
var x = 123;
var a = JSON.stringify(x);
// a == '123'
var y = W-11;
var b = JSON.stringify(y);
// b != 'W-11'
您的困惑来自这样一个事实:在JavaScript代码中,字符串被引号或撇号包围。这就是解释器如何知道引号之间的字符表示它们自己,并且它们不能被解释为代码。在代码中,
'W-11'
是编码为JavaScript的字符串,而字符串的实际值是W-11
(无引号)。您也可以用JavaScript代码编写它,如“W-11”
或`W-11`
不确定“生成此代码的代码应该看起来像这样”示例的解释是否真的有用。我想换一种说法:123
在Javascript中意味着一些有用的东西,但是裸露的W-11
与在JSON中不一样,原因不一样。非常感谢您的解释。
var x = 123;
var a = JSON.stringify(x);
// a == '123'
var y = W-11;
var b = JSON.stringify(y);
// b != 'W-11'
console.log(JSON.parse('"W-11"'));
// W-11