如何使 Javascript“toString”隐含方法文化意识
Posted
技术标签:
【中文标题】如何使 Javascript“toString”隐含方法文化意识【英文标题】:How to make Javascript "toString" implicite method culture aware 【发布时间】:2015-04-10 09:38:16 【问题描述】:在我的 ASP.NET MVC 项目中,我需要使 javascript 隐式字符串表示 能够识别当前文化,尤其是使用小数分隔符。 例如:
var nbr = 12.25;
console.log(nbr);
这里,console.log(nbr)
必须在 EN-US 中显示“12.25”,在 fr-FR 中显示“12,25”,而无需显式调用 toString() 方法。
请问有谁知道实现这个的方法吗?
【问题讨论】:
console.log
不会隐式执行.toString()
,因为它的唯一目的是按原样输出数据。
好的,抱歉,我的解释/示例不是最好的......我想要更普遍的是,JavaScript 中数字在最终 html 中的视觉表示是当前已知的文化无需显式调用此号码的toString()方法。
那么 number 应该如何知道在一种情况下它必须被视为一个国际化字符串,而在另一种情况下它是一个正确的数字?
那么在不告诉javascript的情况下我们如何决定使用哪个?
我真的不知道(到目前为止,我对 JavaScript 的基本用法是 +/- ,而不必考虑那种类型的问题)。当他被写入/注入到最终的 Html 中(假设的)。我完全有可能在我的 JS 理解中遗漏了一些东西,这让我对这种需求误入歧途:(
【参考方案1】:
您可能正在寻找toLocaleString();
:
toLocaleString() 方法返回一个对语言敏感的字符串 这个数字的表示。
新的语言环境和选项参数让应用程序指定 应使用其格式约定的语言并自定义 函数的行为。在较旧的实现中,忽略 语言环境和选项参数,使用的语言环境和形式 返回的字符串完全依赖于实现。
Source
请注意,并非所有浏览器都支持它,或者功能有限。在这些情况下,您可以对其进行 polyfill 或手动处理:
if (typeof Number.prototype.toLocalString === "undefined")
// simply make it available
Number.prototype.toLocalString = Number.prototype.toString;
// or polyfill/handle here...
在您的情况下,您必须明确调用 toLocalString()
才能使其工作。没有一些骇人听闻的方法就没有办法(不推荐):
Number.prototype.toString = function()
return this.toLocaleString(optionsHere)
;
【讨论】:
我同意应该这样做,但从技术上讲,OP 表示他们不想“明确调用toString()
method”。您可能需要解释为什么需要显式调用。
顺便说一句,该功能本身在所有浏览器中都可用,只是在 Safari 等浏览器中不支持指定区域设置和其他特定选项的功能。
谢谢大家,我会接受这个答案,因为这似乎是最终满足我需求的最佳方式。
@Banov 出于某种原因,我想念你只希望它用于 console.log。这可能不适用于 console.log 将按原样显示数字。在这些情况下,将 console.log 包装在一个调用 toLocaleString 的函数中......以上是关于如何使 Javascript“toString”隐含方法文化意识的主要内容,如果未能解决你的问题,请参考以下文章
为啥隐式符号到字符串的转换会导致 JavaScript 中的 TypeError?