如何使 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?

JavaScript——杂项

javascript教程隐式类型转换如何操作

序列化特定类型时如何使 JSON.Net 序列化程序调用 ToString()?

JavaScript基础知识

Javascript - 使数组索引 toLowerCase() 不起作用