js高级第三版(第五章 引用类型)三

5.6基本包装类型

    ECMAScript 还提供了 3 个特殊的引用类型:Boolean、Number 和String。

    引用类型与基本包装类型的主要区别就是对象的生存期。

    使用 new 操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中。

    而自动创建的基本包装类型的对象,则只存在于一行代码的执行瞬间,然后立即被销毁。

    这意味着我们不能在运行时为基本类型值添加属性和方法。

    5.6.1 Boolean类型

    Boolean 类型是与布尔值对应的引用类型。

    Boolean 类型的实例重写了valueOf()方法,返回基本类型值true 或false;

    重写了toString()方法,返回字符串"true"和"false"。

    5.6.2 Number类型

    Number 是与数字值对应的引用类型。要创建 Number 对象,可以在调用 Number 构造函数时向其中传递相应的数值。

    Number 类型也重写了 valueOf()、toLocaleString()和 toString()方法。

    重写后的 valueOf()方法返回对象表示的基本类型的数值,另外两个方法则返回字符串形式的数值。

    toFixed()方法会按照指定的小数位返回数值的字符串表示

    toFixed()方法可以表示带有 0 到 20 个小数位的数值。但这只是标准实现的范围,有些浏览器也可能支持更多位数。

    toExponential()方法返回以指数表示法(也称 e 表示法)表示的数值的字符串形式。

    5.6.3 String类型

    String 类型是字符串的对象包装类型。

    String 对象的方法也可以在所有基本的字符串值中访问到。

    其中,继承的 valueOf()、toLocaleString()和toString()方法,都返回对象所表示的基本字符串值。

    String 类型的每个实例都有一个 length 属性,表示字符串中包含多个字符。

    1. 字符方法

    两个用于访问字符串中特定字符的方法是:charAt()和 charCodeAt()。这两个方法都接收一个参数,即基于 0 的字符位置。

    charAt()方法以单字符字符串的形式返回给定位置的那个字符(ECMAScript 中没有字符类型)。

    charCodeAt() 方法以单字符字符串的形式返回给定位置的那个字符的字符编码

    2. 字符串操作方法

    concat()用于将一或多个字符串拼接起来,返回拼接得到的新字符串。

    ECMAScript还提供了三个基于子字符串创建新字符串的方法:slice()、substr()和 substring()。

    这三个方法都会返回被操作字符串的一个子字符串,而且也都接受一或两个参数。

    第一个参数指定子字符串的开始位置,第二个参数(在指定的情况下)表示子字符串到哪里结束。

    slice()和substring()的第二个参数指定的是子字符串最后一个字符后面的位置。

    而 substr()的第二个参数指定的则是返回的字符个数。

    如果没有给这些方法传递第二个参数,则将字符串的长度作为结束位置。

    参数是负值的情况下:

    slice()方法会将传入的负值与字符串的长度相加,

    substr()方法将负的第一个参数加上字符串的长度,而将负的第二个参数转换为 0。

    substring()方法会把所有负值参数都转换为 0。

    3. 字符串位置方法

    有两个可以从字符串中查找子字符串的方法:indexOf()和 lastIndexOf()。

    这两个方法都是从一个字符串中搜索给定的子字符串,然后返子字符串的位置(如果没有找到该子字符串,则返回-1)。

    区别:

    indexOf()方法从字符串的开头向后搜索子字符串,

    lastIndexOf()方法是从字符串的末尾向前搜索子字符串。

    4. trim()方法

    ECMAScript 5 为所有字符串定义了 trim()方法。

    这个方法会创建一个字符串的副本,删除前置及后缀的所有空格,然后返回结果。

    5. 字符串大小写转换方法

    ECMAScript 中涉及字符串大小写转换的方法有 4 个:

    toLowerCase()、toLocaleLowerCase()、   ==》转小写

    toUpperCase()和 toLocaleUpperCase()。    ==》转大写

    6. 字符串的模式匹配方法

    match()方法,在字符串上调用这个方法,本质上与调用 RegExp 的 exec()方法相同。

    match()方法只接受一个参数,要么是一个正则表达式,要么是一个 RegExp 对象。

    match()方法返回了一个数组;

    search()用于查找模式的方法,参数与 match()方法

    search()方法返回字符串中第一个匹配项的索引;如果没有找到匹配项,则返回-1。

    search()方法始终是从字符串开头向后查找模式。

    replace()方法,替换子字符串的操作

    两个参数:

    第一个参数可以是一个 RegExp 对象或者一个字符串(这个字符串不会被转换成正则表达式),

    第二个参数可以是一个字符串或者一个函数。

    字符序列 替换文本

    $$ $

    $& 匹配整个模式的子字符串。与RegExp.lastMatch的值相同

    $' 匹配的子字符串之前的子字符串。与RegExp.leftContext的值相同

    $` 匹配的子字符串之后的子字符串。与RegExp.rightContext的值相同

    $n 匹配第n个捕获组的子字符串,其中n等于0~9。例如,$1是匹配第一个捕获组的子字符串,$2是匹配第二个捕获组的子字符串,以此类推。如果正则表达式中没有定义捕获组,则使用空字符串

    $nn 匹配第nn个捕获组的子字符串,其中nn等于01~99。例如,$01是匹配第一个捕获组的子字符串,$02是匹配第二个捕获组的子字符串,以此类推。如果正则表达式中没有定义捕获组,则使用空字符串

    replace()方法的第二个参数也可以是一个函数。

    在只有一个匹配项(即与模式匹配的字符串)的情况下,会向这个函数传递 3 个参数:模式的匹配项、模式匹配项在字符串中的位置和原始字符串。

    htmlEscape()为插入 HTML 代码定义的函数

    这个函数能够转义 4 个字符:小于号、大于号、和号以及双引号。

    split()与模式匹配有关的方法,方法可以基于指定的分隔符将一个字符串分割成多个子字符串,并将结果放在一个数组中。

    分隔符可以是字符串,也可以是一个 RegExp 对象(这个方法不会将字符串看成正则表达式)。

    split()方法可以接受可选的第二个参数,用于指定数组的大小,以便确保返回的数组不会超过既定大小。

    7. localeCompare()方法

    localeCompare()方法比较两个字符串,并返回下列值中的一个:

     如果字符串在字母表中应该排在字符串参数之前,则返回一个负数(大多数情况下是-1,具体的值要视实现而定);

     如果字符串等于字符串参数,则返回 0;

     如果字符串在字母表中应该排在字符串参数之后,则返回一个正数(大多数情况下是 1,具体的值同样要视实现而定)。

    localeCompare()方法比较与众不同的地方,就是实现所支持的地区(国家和语言)决定了这个方法的行为。

    8. fromCharCode()方法

    这个方法的任务是接收一或多个字符编码,然后将它们转换成一个字符串。

    从本质上来看,这个方法与实例方法 charCodeAt()执行的是相反的操作。

    9. HTML 方法

    应该尽量不使用这些方法,因为它们创建的标记通常无法表达语义。

    5.7 单体内置对象

    ECMA-262 对内置对象的定义:

    “由 ECMAScript 实现提供的、不依赖于宿主环境的对象,这些对象在 ECMAScript 程序执行之前就已经存在了。”

    5.7.1 Global对象

    Global(全局)对象可以说是 ECMAScript 中最特别的一个对象了,因为不管你从什么角度上看,这个对象都是不存在的。

    1. URI 编码方法

    encodeURI()和 encodeURIComponent()方法可以对 URI(Uniform ResourceIdentifiers,通用资源标识符)进行编码,以便发送给浏览器。

    主要区别在于:

    encodeURI()不会对本身属于 URI 的特殊字符进行编码

    encodeURIComponent()则会对它发现的任何非标准字符进行编码。

    一般来说,我们使用 encodeURIComponent() 方法的时候要比使用encodeURI()更多,因为在实践中更常见的是对查询字符串参数而不是对基础 URI进行编码。

    与 encodeURI()和 encodeURIComponent()方法对应的两个方法分别是 decodeURI()和decodeURIComponent()。

    decodeURI()只能对使用 encodeURI()替换的字符进行解码。

    decodeURIComponent()能够解码使用 encodeURIComponent()编码的所有字符,即它可以解码任何特殊字符的编码。

    URI 方法 encodeURI()、encodeURIComponent()、decodeURI()和 decodeURIComponent()用于替代已经被ECMA-262第3版废弃的escape()和unescape()方法。URI方法能够编码所有 Unicode字符,而原来的方法只能正确地编码 ASCII 字符。因此在开发实践中,特别是在产品级的代码中,一定要使用 URI方法,不要使用 escape()和 unescape()方法。

    2. eval()方法

    eval()方法就像是一个完整的 ECMAScript 解析器,它只接受一个参数,即要执行的 ECMAScript(或 JavaScript)字符串。

    当解析器发现代码中调用 eval()方法时,它会将传入的参数当作实际的 ECMAScript 语句来解析,然后把执行结果插入到原位置。通过 eval()执行的代码被认为是包含该次调用的执行环境的一部分,因此被执行的代码具有与该执行环境相同的作用域链。这意味着通过 eval()执行的代码可以引用在包含环境中定义的变量,

    3. Global 对象的属性

    undefined 特殊值undefined 

    Date 构造函数Date

    NaN 特殊值NaN 

    RegExp 构造函数RegExp

    Infinity 特殊值Infinity 

    Error 构造函数Error

    Object 构造函数Object 

   EvalError 构造函数EvalError

    Array 构造函数Array 

    RangeError 构造函数RangeError

    Function 构造函数Function 

    ReferenceError 构造函数ReferenceError

    Boolean 构造函数Boolean 

    SyntaxError 构造函数SyntaxError

    String 构造函数String 

    TypeError 构造函数TypeError

    Number 构造函数Number 

    URIError 构造函数URIError

4. window 对象

    ECMAScript 虽然没有指出如何直接访问 Global 对象,

    但 Web 浏览器都是将这个全局对象作为window 对象的一部分加以实现的。

    因此,在全局作用域中声明的所有变量和函数,就都成为了 window对象的属性。

5.7.2 Math对象

    ECMAScript 还为保存数学公式和信息提供了一个公共位置,即 Math 对象。

    1. Math 对象的属性

    Math.E 自然对数的底数,即常量e的值

    Math.LN10 10的自然对数

    Math.LN2 2的自然对数

    Math.LOG2E 以2为底e的对数

    Math.LOG10E 以10为底e的对数

    Math.PI π的值

    Math.SQRT1_2 1/2的平方根(即2的平方根的倒数)

    Math.SQRT2 2的平方根

    2. min()和 max()方法

    min()和 max()方法用于确定一组数值中的最小值和最大值

    这两个方法都可以接收任意多个数值参数,

    要找到数组中的最大或最小值,可以像下面这样使用 apply()方法。

    var values = [1, 2, 3, 4, 5, 6, 7, 8];

    var max = Math.max.apply(Math, values);

    3. 舍入方法

    小数值舍入为整数的几个方法:Math.ceil()、Math.floor()和 Math.round()。

     Math.ceil()执行向上舍入,即它总是将数值向上舍入为最接近的整数;

     Math.floor()执行向下舍入,即它总是将数值向下舍入为最接近的整数;

     Math.round()执行标准舍入,即它总是将数值四舍五入为最接近的整数(这也是我们在数学课上学到的舍入规则)。

    4. random()方法

    Math.random()方法返回大于等于 0 小于 1 的一个随机数。

    值 = Math.floor(Math.random() * 可能值的总数 + 第一个可能的值)

    5. 其他方法

    Math.abs(num) 返回num 的绝对值 

    Math.asin(x) 返回x 的反正弦值

    Math.exp(num) 返回Math.E 的num 次幂

    Math.atan(x) 返回x 的反正切值

    Math.log(num) 返回num 的自然对数 

    Math.atan2(y,x) 返回y/x 的反正切值

    Math.pow(num,power) 返回num 的power 次幂 

    Math.cos(x) 返回x 的余弦值

    Math.sqrt(num) 返回num 的平方根 

    Math.sin(x) 返回x 的正弦值

    Math.acos(x) 返回x 的反余弦值 

    Math.tan(x) 返回x 的正切值    






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值