为啥 console.log 从日志中排除我的零?
Posted
技术标签:
【中文标题】为啥 console.log 从日志中排除我的零?【英文标题】:Why does console.log exclude my zero from logging?为什么 console.log 从日志中排除我的零? 【发布时间】:2019-12-13 18:39:57 【问题描述】: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();
调用它时,控制台只显示“619616”。当我添加console.log(tom.phone)
时,它会记录整个数字。为什么调用方法时会排除零?
【问题讨论】:
因为没有人提到它:这是不严格的代码,当你删除九个时事情会变得有趣。 @ASDFGerte 我试过这个,从来不知道我的电话号码这么有趣。还有,现在很迷茫。谢谢! 只要记住“使用严格”;除非你非常清楚自己在做什么。在这种情况下,前导零是八进制数的传统表示法。您的代码甚至会进入严格模式。不过,这只是一个旁注,主要问题已在答案和相关 cmets 中进行了描述。 【参考方案1】:您将其用作整数。
如果要保留零,请将其用作字符串。
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();
解释请查看 cmets 或this link
另一个值得阅读的参考:https://***.com/a/37004175/10473393(感谢@Amy 在 cmets 中的分享)
【讨论】:
感谢您的解决方案。您能否解释一下为什么使用整数时零会消失?是否与 javascript 将其读取为“假”并因此为空有关? @tomdevisser 不,它只是不跟踪前导零,因为它们没有任何数学意义。如果您尝试使用“123.00”作为数字,它会出于同样的原因删除尾随零。如果要保留格式而不仅仅是数字的值,则必须将其设为字符串。 @tomdevisser01234
与 1234
相同。它们在二进制中具有相同的文字表示,并且没有区别。区分它们的唯一方法是强制存储前导零:使用字符串。
@tomdevisser 我想我应该对我所说的添加一个警告。在 JS 中(这可能适用于其他语言),带前导零的数字可能会被错误地视为 八进制。见***.com/questions/37003770/…
@tom 如果我可以再添加一件事,虽然电话号码是一个“数字”,但它不是您要在数学中使用的那种数字。所以,虽然它是一个“数字”,但它不是一个“数字”,如果你明白我的意思的话。电话号码前导零在技术上是有效的,需要保留,而且由于您不打算对电话号码使用数学,因此字符串可能是存储它的更合适的方式。同样的逻辑适用于邮政编码、街道号码和其他从不“数学”的“数字”。【参考方案2】:
您可以将其转换为字符串,并填充开头的前导零。例如,我假设您需要一个 7 位数的电话号码。
class Person
constructor(name, address, phone)
this.name = name;
this.address = address;
this.phone = phone;
call()
console.log(`Calling $this.phone.toString().padStart(7, 0)...`)
const tom = new Person('Tom', 'Uden', 0619616);
tom.call();
【讨论】:
感谢另一个解决方案,从未听说过 padStart。 :)【参考方案3】:您在 Number
类型中传递的值。如果您想保持整个值不变,则需要使用String
,如下所示:
const valueNumber = 0619616;
const valueString = '0619616';
console.log(valueNumber, valueString);
希望对你有帮助!
【讨论】:
谢谢!我只是想了解为什么这是必要的,是否有零不记录的原因? @tomdevisser 根据我的其他评论,前导零没有任何表示,无法与数字“实际值”区分开来【参考方案4】:要在左侧包含零,您应该将其用作字符串
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();
【讨论】:
以上是关于为啥 console.log 从日志中排除我的零?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 console.log 没有在这里输出任何东西? [复制]
为啥 Google Chrome 将相同的 console.log 消息分组?