深入理解JavaScript学习笔记-第【十一、十二、十三】章

第十一章.数字

js对所有数字只有一种类型:浮点数。只不过小数点后面没有数字,这个小数点也被省略。这个浮点数是双精度的(也就是Double,64位)。

11.1 数字字面量

数字字面量可以是整型、浮点型或十六进制:
在这里插入图片描述
指数eX,代表10的x次方的缩写:
在这里插入图片描述
注:前面提到过了,在字面量上调用方法,不能直接123.toString这样调用。因为js分不清点是代表123是小数,还是调用方法的点。

11.2 转换为数字

结果
undefinedNaN
null0
布尔值false转换为0,true转换为1
字符串解析字符串中的数字(忽略开头和结尾的空格);空字符转换为0.比如’3.14’转换为3.14
对象调用ToPrimitive(value,number)并转换生成原始类型
  1. 手动转换为数字
    (1)Number(value)
    在这里插入图片描述
    (2)+value
    在这里插入图片描述
  2. parseFloat()
    (1)对非字符使用parseFloat()效率很低,因为先要将参数转化为字符串。所以需要被Number()解析成实际数字的值被parseFloat()转化成了NaN:
    在这里插入图片描述
    在这里插入图片描述
    (2)parseFloat会一直解析到最后一个合法的字符为止:
    在这里插入图片描述
    (3)parseFloat会忽略开头空格和结尾空格,并在非法字符前停止:
    在这里插入图片描述
    而Number()会忽略开头和结尾的空格,遇到非法字符会导致解析结果为NaN:
    在这里插入图片描述

11.3 特殊数字值

  js中有两个错误值:NaN和Infinity;有两个零:+0和-0,这是因为js中符号和数值是分开存储的,在使用的时候就当作0用就可以(正负0都看为0)。

  1. NaN
    NaN的类型为Number(虽然它本身表示非数)。NaN是唯一一个和自身不相等的值。
    在这里插入图片描述
    要检查一个值是否为NaN。必须使用全局函数isNaN():
    在这里插入图片描述
    对于非数字量,isNaN()不起作用。因为非数字量会先转化为数字:
    在这里插入图片描述

有两个办法区别NaN和其他量

  • isNaN()和类型检查结合:
    在这里插入图片描述
  • 利用自身不等
    在这里插入图片描述
  1. Infinity
    Infinity代表无穷大。通常由于两种原因。第一是由于运算数字结果过大,比如2的1024次幂,在Js里就无法用数字表示:
    在这里插入图片描述
    第二种情况是一个数除以0,在极限上得到的结果也是过大,从而无法表示:
    在这里插入图片描述

Infinity的检查:

  • 可以使用相等:
    在这里插入图片描述
  • 可以使用全局函数isFinite()来判断是否是一个实际的值(会筛选掉NaN和Infinity):
    在这里插入图片描述
    +0与-0的判别:
    通过除以0来判断:
    在这里插入图片描述
    写成函数的形式:
    在这里插入图片描述额fuh

11.4 数字的内部表示

这里只需要知道数字从二进制得到目标结果的内部运算时,符号和值是分开计算的。

11.6 JS中的整型

1. 整型的范围
  • 安全整型,javaScript支持的最长的实用整型范围是:
    53位加一个符号,范围(-2^53 , 2^53)
    在这里插入图片描述
  • 数组索引(后面讲)
    索引值为32位无符号,所以索引返回为[0 , 2^32-1]
  • 按位运算符(后面讲)
    无符号右移(>>>):32位,无符号,范围[0 , 2^32]
    其他的所有按位运算符:32位,含一个符号,范围[-2^31 , 2^31]
2. 安全的整型

ES6提供以下常量:
Number.MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;
Number.MIN_SAFE_INTEGER = -Number.MAX_SAFE_INTEGER;
同时提供了一个检测整型是否安全的函数:

Number.isSafeInteger = function(n){
	return (typeof n === 'number' &&
	Math.round(n) === n && 
	Number.MIN_SAFE_INTEGER <= n &&
	n <= Number.MAX_SAFE_INTEGER
	);
}

算数运算的安全结果:
在这里插入图片描述
在这里插入图片描述
两个安全数得到一个不安全数,所以只有当所有的运算数和结果都是安全的时候,才能保证整体运算是正确的。
可以使用如下判断来看一个运算是否正确:
isSafeInteger(a) && isSafeInteger(b) && isSafeInteger(a op b) 代表a op b都是正确的。

11.7 转换成整数

最理想的方式是通过Math的函数进行转换:

  • Math.floor():
    在这里插入图片描述
  • Math.ceil():
    在这里插入图片描述
  • Math.round():
    在这里插入图片描述
    Math.floor(x)等同于Math.ceil(x+0.5)

还有一种方式常常用于将字符串转化为数字----parseInt(str,?radix):
在这里插入图片描述
与之对应的将数字转化为字符串的方法-----toString(radix?):
在这里插入图片描述

11.11 Number构造器属性

在这里插入图片描述

11.11 Number原型方法

原始值中数字的方法全部都存储在Number.prototype中。例如Number.prototype.toFixed(fractionDigits?)返回不使用指数表示的数字,舍入到小数点后第fractionDigits位。默认参数为0。
原始值可以直接调用:
在这里插入图片描述

第十二章.字符串yu

字符串是由JS字符组成的不可变序列。每个字符是16位的UTF-16编码单元。
注意:关于单引号和双引号的使用

  • 最常见的做法是在HTML中使用双引号,在javaScript中使用单引号
  • 在多语言编程环境下使用双引号
  • 在JSON中,必须使用双引号

12.2 转义字符

  1. 在字符串中,行尾使用反斜杠可以让一个字符串跨行编写,或者可以使用+号将多个字符串连接起来:
    在这里插入图片描述
    在这里插入图片描述
  2. 空字符
    用\0表示
    在这里插入图片描述
  3. Unicode转义序列
    \uHHHH(HHHH是4个十六进制数字)表示一个UTF-16编码单元:
    在这里插入图片描述

12.3 字符访问

有两种访问字符串中字符的方法:
在这里插入图片描述

12.4 转换为字符串

值得注意的是对象转换为字符串的方法ToPrimitive(value,String),将原始值结果转换为字符串:
在这里插入图片描述
还有另一种方法(只适用于对象中的JSON类型),是使用JSON.stringify():
在这里插入图片描述

12.7 字符串函数

可以通过以下两种方式调用String方法:
String(value)
在这里插入图片描述
new String(str)
在这里插入图片描述
比较常用的是第一种方法。

12.10 字符串原型方法:

字符串是js操作中操作最为频繁的一种类型,它的原型方法经常会用到。这一节很重要!

  1. 提取子字符串
  • charAt(pos)------提取单个字符
  • charCodeAt(pos)------逆函数是String.fromCharCode(codeUnit1, codeUnit2, …)
  • slice(start, end?)------包括start,不包括end
  • substring(start, end?)------与slice类似,区别在下面
  • split(separator?, limit?)-------分割字符串,返回数组(limit代表返回数组长度)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    这里说一下slice和subtitle的区别:
    (1) 如果end设置为负数,slice的结果和substring的结果就不同了。slice会返回开始到末尾倒数之前的字串,如下,返回第2个字符开始到倒数第三个字符之前的字串llo wo;而substring中如果y是负值,则直接输出x(包括)前面的值

    在这里插入图片描述
    (2) 如果x大于y,两个函数的处理方式也不同。substring会自动将x于y颠倒,然后查找正确的结果,而slice则会返回一个空的字串。
    在这里插入图片描述
    所以平时可以使用substring直接代替slice,因为它可以更好的特殊参数。
  1. 字符串的变换
  • trim()-------去除字符串开头和结尾处的空格
  • concat(str1?, str2?, …)
  • toLowerCase()----------将字符串转化为小写
  • toLocaleLowerCase()----------与toLowerCase相同,但是转换时遵循本地规则
  • toUpperCase()------------将字符串转化为大写
  • toLocaleUpperCase()
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  1. 字符串的检索和比较
  • indexOf(searchString, position?)------其中position代表从第几个位置开始寻找
  • lastIndexOf(searchString, position?)-----其中position代表从后向前的位置
  • localeCompare(other)----比较字符串大小(根据字符编码)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  1. 支持正则表达式的方法
  • search(regexp)--------返回字符串中第一个与Reg匹配的字串位置
  • match(regexp)--------将与正则匹配的字串返回(+g则将结果放到数组返回)
  • replace(search, replacement)-------字符串按正则修改(+g才为整体替换,否则只替换第一个)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

第十三章.语句

13.3 循环

13.3.1 循环机制
  1. break [label]
    跳出整个循环
  2. continue [label]
    跳出本地的循环体,立即进入下一次循环
  3. label
    标签是一个紧跟冒号的标识符。可以作为break和continue的参数使用:
    在这里插入图片描述
    上图中的loop就是一个标签,可供break作为参数使用。可以看到当遍历到偶数时,自动跳出loop标签括起来的区域(而非仅仅跳出循环,可以通过是否打印No even number found看到)。
13.3.5 for-in、for-of、forEach()
  1. for-in:
    for-in不要用来遍历数组!因为首先,对于for-in来说,他遍历的是索引,而不是数组元素。其次,for-in会遍历到所有的属性值(非索引值):
    在这里插入图片描述
    所以for-in常常被用来遍历一个对象中的所有键值。
    以下是重点!
      for-in会遍历所有(可枚举的)属性,其中包括了继承来的属性。这些属性有时不是你所希望要的,例如:
    在这里插入图片描述
      通过hasOwnProperty()来在for-in中排除对象所继承的属性:
    在这里插入图片描述

  2. for-of:

  3. forEach():
    forEach()接受一个function参数,被用来遍历数组,forEach()没法使用break或continue及return从函数体内返回。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值