Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

重学js —— 文本处理——String对象一:构造器上的属性 #117

Open
lizhongzhen11 opened this issue Jun 6, 2020 · 0 comments
Labels
js基础 Good for newcomers 重学js 重学js系列 规范+MDN

Comments

@lizhongzhen11
Copy link
Owner

文本处理:String对象一:构造器上的属性

String构造器

  • MDN
  • 即固有对象 %String%
  • 全局对象 "String" 属性的初始值
  • 当作为构造器调用时,创建并初始化一个新的String对象
  • 当作为普通函数调用时执行类型转行
  • 被设计成子类。它可以用作类定义的 extends 子句的值。打算继承指定的 String 行为的子类构造函数必须包括对 String 构造函数的 super 调用,以创建和初始化具有内置插槽 [[StringData]] 的子类实例。

String ( value )

  1. 如果 value 不存在,定义 s 为空字符串
  2. 否则,
    1. 如果 NewTargetundefinedvalueSymbol 类型,返回 SymbolDescriptiveString(value)
    2. 定义 s? ToString(value)
  3. 如果 NewTargetundefined,返回 s
  4. 返回 ! StringCreate(s, ? GetPrototypeFromConstructor(NewTarget, "%String.prototype%"))

String构造器上的属性

String.fromCharCode ( ...codeUnits )

  • MDN
  • 返回由指定的 UTF-16 代码单元序列创建的字符串
  1. 定义 codeUnits 为传给该函数的所有参数构成的 List
  2. 定义 lengthcodeUnits 中的元素数量
  3. 定义 elements 为新的空 List
  4. 定义 nextIndex 为 0
  5. nextIndex < length 时重复以下操作,
    1. 定义 nextcodeUnits[nextIndex]
    2. 定义 nextCU? ToUint16(next)
    3. nextCU 添加到 elements 末尾
    4. nextIndex 设置为 nextIndex + 1
  6. 返回字符串值,其顺序为 List elements 中的元素。如果 length 为 0,返回空字符串。

该函数的 "length" 属性值为 1.

String.fromCodePoint ( ...codePoints )

  1. 定义 codePoints 为传给该函数的所有参数构成的 List
  2. 定义 lengthcodePoints 中的元素数量
  3. 定义 elements 为新的空 List
  4. 定义 nextIndex 为 0
  5. nextIndex < length 时重复以下操作,
    1. 定义 nextcodePoints[nextIndex]
    2. 定义 nextCP? ToNumber(next)
    3. 如果 nextCP 不是整数,抛 RangeError 异常
    4. 如果 nextCP < 0nextCP > 0x10FFFF,抛 RangeError 异常
    5. nextCPUTF16Encoding 元素添加到 elements 尾部
    6. nextIndex 设置为 nextIndex + 1
  6. 返回字符串值,其顺序为List元素中的元素。如果length为0,则返回空字符串。

该函数的 "length" 属性值为 1。

String.prototype

初始值为 %String.prototype%

属性描述符为 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }

String.raw()

String.raw`\n` // \n
'\n' // 回车符
`\n` // 回车符

String.raw({ raw: 'test' }, 0, 1, 2); // 't0e1s2t'
String.raw({ a: 'test' }); // 报错
  1. 定义 substitutions 为一个由所有传给该函数的参数(从第二个参数开始)组成的 List,如果少于两个参数,则 List 为空
  2. 定义 numberOfSubstitutionssubstitutions 中的元素数量
  3. 定义 cooked? ToObject(next)
  4. 定义 raw? ToObject(? Get(cooked, "raw"))
  5. 定义 literalSegments? LengthOfArrayLike(raw)
  6. 如果 literalSegments ≤ 0,返回空字符串
  7. 定义 stringElements 为空 List
  8. 定义 nextIndex 为 0
  9. 重复,
    1. 定义 nextKey! ToString(nextIndex)
    2. 定义 nextSeg? ToString(? Get(raw, nextKey))
    3. 按顺序将 nextSeg 的代码单元元素追加到 stringElements 的末尾
    4. 如果 nextIndex + 1 = literalSegments
      1. 返回字符串值,其代码单元按顺序与 stringElements 中的元素顺序一致。 如果 stringElements 没有元素,则返回空字符串。
    5. 如果 nextIndex < numberOfSubstitutions,定义 nextsubstitutions[nextIndex]
    6. 否则,定义 next 为空字符串
    7. 定义 nextSub? ToString(next)
    8. 按顺序将 nextSub 的代码单元元素追加到 stringElements 的末尾
    9. nextIndex 设置为 nextIndex + 1

String实例上的属性

length

  • { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }

String迭代器对象

CreateStringIterator ( string )

%StringIteratorPrototype% 对象

String 迭代器实例上的属性

String 迭代器属于 普通对象。继承 %StringIteratorPrototype% 固有对象的属性。还有以下列出的内置插槽:

内置插槽 描述
[[IteratedString]] 要迭代其代码单元的字符串值。
[[StringNextIndex]] 此迭代器要检查的下一个字符串元素(代码单元)的整数索引。
@lizhongzhen11 lizhongzhen11 added js基础 Good for newcomers 重学js 重学js系列 规范+MDN labels Jun 6, 2020
@lizhongzhen11 lizhongzhen11 changed the title 重学js —— 文本处理:String对象一:构造器上的属性 重学js —— 文本处理——String对象一:构造器上的属性 Jun 9, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
js基础 Good for newcomers 重学js 重学js系列 规范+MDN
Projects
None yet
Development

No branches or pull requests

1 participant