Javascript中toString()和String()之间的结果不同

时间:2018-03-25 16:47:05

标签: javascript variables

我已经尝试彻底搜索,但我还没有找到Javascript的答案。

所以:我想转换为字符串(如果还没有)从前端发送到我的API的每个JSON值,以避免在处理值时触发问题。

为此,我提出了三种方法:

  • 使用 String()
  • 使用变量+“”

上述两个产生相同的结果。

  • 使用 .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()实际上试图“解析”该值,就像它是一个表达式或函数一样。这准确吗?

2 个答案:

答案 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;
&#13;
&#13;

答案 1 :(得分:0)

JSON.parseJSON.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 ) )