web-dev-qa-db-ja.com

toLocaleLowerCase()とtoLowerCase()の違い

toLocaleLowerCase() および toLowerCase() メソッドで fiddle を試みました。

function ByLocale() {
  document.getElementById("demo").innerText.toLocaleLowerCase();
}

function ByLower() {
  document.getElementById("demo").innerText.toLowerCase();
}
<p>Click the button to convert the string "HELLO World!" to lowercase letters.</p>

<button onclick="ByLocale();">By Locale LowerCase</button>
<button onclick="ByLower();">By LowerCase</button>

<p id="demo">HELLO World!</p>

私の質問は:

  • Localeとは何ですか、どちらの関数も同様の出力を返すように見えるためですか?
  • これら2つの方法の違いは何ですか?
  • フィドルコードが実行されないのはなぜですか?
21
student

toLowerCaseとは異なり、toLocaleLowerCaseはローカライズを考慮します。ほとんどの場合、ほとんどの言語で同様の出力が生成されますが、特定の言語の動作は異なります。

MDN:の説明をご覧ください

ToLocaleLowerCase()メソッドは、ロケール固有のケースマッピングに従って小文字に変換された文字列の値を返します。 toLocaleLowerCase()は、文字列自体の値には影響しません。ほとんどの場合、これはtoLowerCase()と同じ結果を生成しますが、ケースマッピングがUnicodeのデフォルトのケースマッピングに従っていないトルコ語などの一部のロケールでは、結果が異なる場合があります。

完全を期すために、toUpperCasetoLocaleUpperCaseは同様に動作しますが、大文字の場合を除きます。


次に、スニペットが何もしないという問題について説明します。実際には2つの問題があります。

  1. これらのメソッドは新しい文字列を返し、元の文字列を変更しません(JavaScript文字列は不変です)。値を要素に再割り当てする必要があります。

  2. innerTextは非標準であり、すべてのブラウザーで機能するわけではありません。代わりにtextContentを使用し、innerTextのみを追加して、IEの古いバージョンをサポートします。

作業スニペット:

function ByLocale() {
  var el = document.getElementById("demo");
  el.textContent = el.textContent.toLocaleLowerCase();
}

function ByLower() {
  var el = document.getElementById("demo");
  el.textContent = el.textContent.toLowerCase();
}
<p>Click the button to convert the string "HELLO World!" to lowercase letters.</p>

<button onclick="ByLocale();">By Locale LowerCase</button>
<button onclick="ByLower();">By LowerCase</button>

<p id="demo">HELLO World!</p>
24