String
、文字列値 (JavaScript)A string value is a member of the type
String
and is a finite ordered sequence of zero or more 16-bit unsigned integer values.NOTE Although each value usually represents a single 16-bit unit of UTF-16 text, the language does not place any restrictions or requirements on the values except that they be 16-bit unsigned integers.
The type
String
is the set of all string values.
[5] >>1 の定義と NOTE より、 UTF-16 として不正な値 (サロゲート・ペアの片割れ) が含まれていたり、
Unicode の文字ではない符号位置 (非文字) や文字が割り当てられていない符号位置や
U+0000
NULL
が含まれていても JavaScript
的には構わないことになります。
[6] ただし JavaScript の関数すべてで UTF-16 として不適切な値がチェックなしで素通しになるわけではありません。
例えば encodeURIComponent()
はサロゲート・ペアの片割れが見つかると例外を投げます。
[8] また、明記されていませんが BOM も特別扱いされないことになります。実際上は BOM を使わない UTF-16 符号単位の列として理解・実装されています。 UTF-16符号単位が文字列の構成要素として定義されているので、 定義上エンディアン問題は JavaScript プログラム内には持ち込まれていません。文字列に内部的に BOM を持たせる実装は理論上あり得ますが、現実にはそのような実装は複雑になるだけで利点もなく、 存在しないと思います。
[7] DOM・WebIDL では DOMString
に相当します。
JavaScript が UTF-16 を採用していた歴史的経緯もあって
DOMString
も UTF-16符号単位の列とされています。
[9] 多くのプログラミング言語に存在する文字列型に相当しますが、各言語とは細部で色々と異なります。
[10] UTF-16符号単位の列である点では Java の String
と同じです。
[11] C の文字列 (char
の配列) はバイト列であり、 JavaScript
とは大きく異なります。
[12] Perl の文字列はバイト列または utf8 文字列であり、 JavaScript とは違いがあります。
[13] XPathデータ・モデルの string
は文字列であり、 JavaScript
とは異なります。
String
オブジェクト (JavaScript)A String object is a member of the type
Object
and is an instance of the built-inString
object. That is, a String object is created by using theString
constructor in anew
expression, supplying a string as an argument. The resulting object has an implicit (unnamed) property that is the string. AString
object can be coerced to a string value by calling theString
constructor as a function (15.5.1).
[4] Kazuho@Cybozu Labs: JavaScript の文字列定数でエスケープが必要な文字 ( 版) http://labs.cybozu.co.jp/blog/kazuho/archives/2006/11/js_string_literal2.php (名無しさん 2007-01-12 14:14:06 +00:00)
[16] Slimmer and faster JavaScript strings in Firefox | JavaScript ( 版) https://blog.mozilla.org/javascript/2014/07/21/slimmer-and-faster-javascript-strings-in-firefox/
[18] Issue 2217 - v8 - HTML extensions to String.prototype shouldn’t escape ', < and > in argument values; only " - V8 JavaScript Engine - Google Project Hosting ( ( 版)) http://code.google.com/p/v8/issues/detail?id=2217
[17] Define JavaScript string and scalar value string (annevk著, ) https://github.com/whatwg/infra/commit/f1be763cfba23d2fc780b35403074c599e69616e
[19] Define length for byte sequences and strings (annevk著, ) https://github.com/whatwg/infra/commit/c484a4fe0d7bdc52b0f17ab99e49eaa9e56e3f56
[20] Editorial: let code point and friends be defined by Infra (annevk著, ) https://github.com/whatwg/html/commit/59595d9c2ccadb9332c15048be5d30174532ee70
[21] Remove `String` extensions · whatwg/javascript@b7ade3d ( 版) https://github.com/whatwg/javascript/commit/b7ade3d9ebbb3373aca1303f4f6516c884dc362c
[22] Breaking: refactor structured clone into serialize/deserialize (domenic著, ) https://github.com/whatwg/html/commit/97d644c97335956610a31e8ad98d1a388c063e84
[23] Clarify the interpretation of string literal tokens (Ms2ger著, ) https://github.com/heycam/webidl/commit/1fa8c43d2dc0ade28b79464b95078c7d030d19b9
[24] Defining a ByteString default value using a string literal gives no clear link to the explanation of how the string is converted to ByteString · Issue #141 · heycam/webidl () https://github.com/heycam/webidl/issues/141
[25] Clarify the interpretation of string literal tokens. by Ms2ger · Pull Request #621 · heycam/webidl () https://github.com/heycam/webidl/pull/621