为什么 console.log 从日志中排除我的零?

Tom*_*Tom 1 javascript

class Person {
  constructor(name, address, phone) {
    this.name = name;
    this.address = address;
    this.phone = phone;
  }

  call() {
    console.log(`Calling ${this.phone}...`)
  }
}

const tom = new Person('Tom', 'Uden', 0619616);
tom.call();
Run Code Online (Sandbox Code Playgroud)

调用它时,控制台只显示“619616”。当我添加console.log(tom.phone)它时,它会记录整个数字。为什么在调用方法时排除零?

Ale*_*tos 5

您将其用作整数。

如果要保留零,请将其用作字符串。

class Person {
  constructor(name, address, phone) {
    this.name = name;
    this.address = address;
    this.phone = phone;
  }

  call() {
    console.log(`Calling ${this.phone}...`)
  }
}

const tom = new Person('Tom', 'Uden', '0619616');
tom.call();
Run Code Online (Sandbox Code Playgroud)

如需解释,请查看评论或此链接

另一个值得阅读的参考:https : //stackoverflow.com/a/37004175/10473393(感谢@Amy 在评论中分享)

  • @tom如果我可以再添加一件事,虽然电话号码是一个“数字”,但它不是您要在数学中使用的数字。所以,虽然它是一个“数字”,但它不是一个“数字”,如果你明白我的意思的话。从技术上讲,电话号码带有前导零是有效的,需要保留这些电话号码,并且由于您不会对电话号码使用数学运算,因此字符串可能是更合适的存储方式。同样的逻辑也适用于邮政编码、街道号码和其他从未“数学化”的“数字”。 (3认同)
  • @tomdevisser 不,它只是不跟踪前导零,因为它们没有任何数学意义。如果您尝试使用“123.00”作为数字,它会出于同样的原因删除尾随零。如果您想保留格式而不仅仅是数字值,则必须将其设置为字符串。 (2认同)
  • @tomdevisser `01234` 与 `1234` 是相同的数字。它们具有相同的二进制字面表示形式,并且没有区别。区分它们的唯一方法是强制存储前导零:使用字符串。 (2认同)
  • @tomdevisser 我想我应该在我所说的内容中添加一个警告。在 JS 中(这可能适用于其他语言),带有前导零的数字可能会被错误地视为*八进制*。请参阅/sf/ask/2590263931/ (2认同)