我已经尝试彻底搜索,但我还没有找到Javascript的答案。
所以:我想转换为字符串(如果还没有)从前端发送到我的API的每个JSON值,以避免在处理值时触发问题。
为此,我提出了三种方法:
上述两个产生相同的结果。
使用 .toString() 这个应该像上面那样工作,将任何数字,布尔值,未定义或null转换为字符串,但是它失败并且为null和undefined。
let data = {
key1: 1,
key2: "2",
key3: false,
key4: null,
key5: undefined,
key6: {
subkey1: true
}
};
console.log("\nString() method:")
for (let key in data) {
let stringified = (String(data[key]))
console.log(stringified)
console.log(typeof(stringified))
}
console.log("\nQuotes method:")
for (let key in data) {
let quotedValue = (data[key] + "");
console.log(quotedValue);
console.log(typeof(quotedValue));
}
console.log("\ntoString method:")
for (let key in data) {
let toStringTest = (data[key].toString());
console.log(toStringTest);
console.log(typeof(toStringTest));
}
返回:
String() method:
1
string
2
string
false
string
null
string
undefined
string
[object Object]
string
Quotes method:
1
string
2
string
false
string
null
string
undefined
string
[object Object]
string
toString method:
1
string
2
string
false
string
Error: let toStringTest = (data[key].toString());
TypeError: Cannot read property 'toString' of null
在研究时我相信我理解toString()实际上试图“解析”该值,就像它是一个表达式或函数一样。这准确吗?
答案 0 :(得分:1)
.toString()
是Object.prototype
的方法 - 您几乎可以在任何JavaScript对象上调用它。 undefined
表示"不存在",因此尝试在不是某个对象的内容上调用方法将始终失败,因为在{上调用.toString()
{1}}。
null

var x; // Declared but not initialized to anything === undefined
x.toString(); // Cannot read property "toString" of undefined.
var y = null; // Declared and intentionally set to a value that means no value
y.toString(); // Cannot read property "toString" of null.
和undefined
的理解有关。 undefined
是您在尝试获取不存在的内容的价值时获得的内容。 null
并不意味着设置为的值。
自undefined
起,您无法将undefined === doesn't exist
转换为字符串。您可以查询是doesn't exist
还是something === undefined
,然后创建一个空字符串来替换它。
typeof something === "undefined"

null
用于设置不代表任何内容的值。
所以,你的对象不是很正确,它应该是:
var x; // undefined
var y = null;
// Check to see if we have something (truthy) or nothing (falsy)
// !! converts a non-Boolean to a Boolean that is opposite of what
// it would normally be. !! converts it back to Boolean equivelent.
console.log(!!x, !!y);
function testForNothing(val){
// Within an if condition, all values are converted to Booleans by default
// and implicitly tested for true. We want to test for false (to see if x is
// NOT something), so a single ! will do the trick
if(!val){
console.log(val + " is null or undefined");
}
}
testForNothing(x);
testForNothing(y);
最后,为什么不使用专为此设计的 JSON.stringify()
?
let data = {
key1: 1,
key2: "2",
key3: false,
key4: null,
key5: null, // <-- null, not undefined!
key6: {
subkey1: true
}
};
&#13;
答案 1 :(得分:0)
JSON.parse
和JSON.stringify
仅排除undefined
个值,但这些值可以轻松替换:
var data = { key1: 1, key2: "2", key3: false, key4: null,
key5: undefined, key6: { subkey1: true } }
console.log( JSON.stringify( data, (k, v) => v === void 0 ? null : v, 2 ) )