Javascript parse将数字视为有效的Json对象的字符串

Javascript 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。如果

此代码返回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('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