内容
---语法 上一小节
---数据类型 本小节 number类型
---流程控制语句
---理解函数

number类型
--使用IEEE754格式来表示整数和浮点数值(双精度数值)
--规定了数值字面量格式,支持各种数值类型

55 //整数
070 //八进制56
079 //无效八进制,解析为79
08 //无效,解析为8

--八进制第一位必须是零(0),如果字面值超出范围,前导忽略作为十进制
--严格模式下,八进制无效,会抛出错误

--十六进制以 0x 开头,超出格式报错
--在算术计算时,统一用十进制数值
--+0和-0,支持保存,但是值认为相等

浮点数值
--数值中必须包含小数点,并且小数点之后必须有一位数字
--小数点之前可以没有数字,但是不推荐

var a = 1.1;
var b = 0.2;
var c = .3; //有效,不推荐

--浮点数值存储空间是整数值的两倍,因此ECMAScript会不失时机地将浮点数值转化为整数值
--小数点后没有任何数字,本身就是整数的浮点数(1.0)都会被转化成整数值

科学记数法
--e表示法,前面是一个数值,中间是一个e/E,后面是10的幂中的指数

var floatNum = 3.125e7; //31250000

--表示极小数时,ECMAScript默认会对小数点后带有6个零以上的浮点数值转化为e表示法

--浮点数值最高精度是17位小数,但是在进行算术计算时精度远远不如整数
--0.1+0.2 = 0.30000000000004
--所以不要测试某个特定的浮点数值,用于判断
--这是IEEE754数值的通病

数值范围
--最小数值保存在Number.MIN_VALUE中,在大多数浏览器下是5e-324
--最大数值保存在Number.MAX_VALUE中,在大多数浏览器下是1.7976931348623157e+308
--计算的数值超出数值范围,这个数值将被保存为特殊值 Infinity
--正数 Infinity, 负数 -Infinity
--访问Number.NEGATIVE_IFINNTY和Number.POSITIVE_IFINNTY可以得到负和正Infinity的值

NAN
--非数值(Not a Number)是一个特殊数值
--用于表示本来要返回数值的操作数未返回数值的情况(不会抛出错误)
--例如 a/0 返回NaN不会影响其他代码的执行
--涉及NaN的操作返回都是NaN
--NaN与任何值都不相等,包括自身 NaN==NaN//false
--isNaN()函数,用于判断是否 不是数值

isNaN(NaN); //true
isNaN(10); //false
isNaN("10"); //false
isNaN("blue");//true
isNaN(true); //false

--true->1,false->0,

--isNaN()也适用于对象,
--对象调用,会首先对用对象的valueOf()方法,判断返回值,如果不能
--则基于这个返回值再调用toString()方法,再检测返回值

数值转换
--Number(),parseInt(), parseFloat()
--Number()用于任何数据类型,后两个专门用于字符串

Number()下
--true->1,false->0
--数值,简单传入和返回
--null->0
--undefined->NaN
--字符串
----只包含数值(包括+,-)转化为十进制数(前导零会被忽略,所以没有八进制)
----有效浮点数(前导零会被忽略,所以没有八进制)
----有效十六进制,会转化为相同大小十进制
----空串-> 0
----还包含其他字符,则转化为NaN
----如果是对象,则先调用valueOf(),转化如果为NaN,再调用toString()
--对字符串转换比较复杂,不合理一般用parseInt,parseFloat代替

Number()等同于一元+操作符

Number("11"); //11
+("11"); //11
-("11"); //-11
+"11"; //11
-"11"; //-11

parseInt(string, radix)方法
--返回十进制数值
--忽略空格
--第一个不是负号或者数字字符 返回NaN
--直到解析完后续字符或者遇到了非数字字符
--小数点无效
--radix,可选(es5支持的参数)。表示要解析的数字的基数。该值介于 2 ~ 36 之间。
--(es5)八进制无效,(es3支持八进制)
--如果省略该参数或其值为 0,则数字将以 10 为基础来解析。
--如果它以 “0x” 或 “0X” 开头,将以 16 为基数。
--如果基数为16,则能识别 0x开头的 和不以0x开头的两种
--如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

parseInt(" 1.1asd"); //1
parseInt("010"); //10
parseInt("010",6); //6
parseInt("0xa"); //10
parseInt("0xa",16); //10
parseInt("a",16); //10
parseInt("0xa",17); //0 x无法识别

请始终保持基数radix参数的书写,防止出错

拓展

["1", "2", "3"].map(parseInt)输出什么?

["1", "2", "3"].map(parseInt)等同于
["1","2","3"].map(function(ele,index){
  return parseInt(ele,index)
})

等于调用了三次parseInt方法:
第一次 parseInt("1",0) //基数为0时,按照上边陈述即为10进制,返回 1
第一次 parseInt("2",1)//基数为1,不在2-36范围内,默认输出NaN
第一次 parseInt("3",2)//基数为2,因为字符串3大于基数不合法,解析为NaN
答案也就是:[1, NaN, NaN]

parseFloat(string)方法
--与parseInt相同,从第一位置解析之末尾
--或者遇到第一个无效浮点数字符
--第一个小数点有效,之后的无效
--只识别十进制

parseFloat(" 0.1.1asd"); //0.1
parseFloat("0.1e2.3"); //10 e后面为整数 第二个点无效

《JavaScript高级程序设计》读书笔记(三)基本概念第二小节 Number类型的更多相关文章

  1. 《javascript高级程序设计》笔记三

    第三章 基本概念 任何语言的核心必然会描述这门语言最基本的工作原理.这部分内容对我们来说,读起来很乏味,甚至会产生困意,但这部分内容却是重要的!我有幸拜读<JavaScript高级程序设计> ...

  2. 《JavaScript高级程序设计》笔记:基本概念(三)

    数据类型 ECMAScript中有5种简单数据类型(也称为基本数据类型):undefined,null,boolean,number和string. typeof typeof null会返回“obj ...

  3. javascript高级程序设计读书笔记-事件(一)

    读书笔记,写的很乱   事件处理程序   事件处理程序分为三种: 1.html事件2. DOM0级,3,DOM2级别  没有DOM1 同样的事件 DOM0会顶掉html事件   因为他们都是属性  而 ...

  4. javascript高级程序设计 读书笔记1

    第二章  在HTML中使用JS 加载JS有三种:行内,head头部和外部链接JS   最好使用外部链接<script src="example.js" ></sc ...

  5. Javascript高级程序设计读书笔记(第三章)

    第3章 基本概念 3.4 数据类型 5种简单数据类型:undefined.boolean.number.null.string. typeof操作符,能返回下列某个字符串:“undefined”.“b ...

  6. javascript高级程序设计读书笔记

    第2章  在html中使用javascript 一般都会把js引用文件放在</body>前面,而不是放在<head>里, 目的是最后读取js文件以提高网页载入速度. 引用js文 ...

  7. JavaScript高级程序设计 读书笔记

    第一章 JavaScript 简介 第二章 Html中使用JavaScript 第三章 基本概念 第四章 变量,作用域,内存 第五章 引用类型 第六章 面向对象 第七章 函数表达式 第八章 BOM 第 ...

  8. JavaScript高级程序设计-读书笔记(6)

    第20章 JSON JSON是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量 JSON的语法可以表示一下三种类型的值 l        简单值:使用与JavaScript相同的语法,可以在JS ...

  9. JavaScript高级程序设计-读书笔记(1)

    第1章 JavaScript简介 JavaScript是一种专为与网页交互而设计的脚本语言,由下列三个不同的部分组成: l        ECMAScript:提供核心语言功能: l        文 ...

随机推荐

  1. java面试题错题集(牛客网错题)

    一.关于Object类的说法正确 Java中所有的类都直接或间接继承自Object,无论是否明确的指明,无论其是否是抽象类. Object的equals方法,只有一句话,return this==ob ...

  2. 大数据-Storm

    Storm 流式处理框架 Storm是实时的,分布式,高容错的计算系统.java+cljoure Storm常驻内存,数据在内存中处理不经过磁盘,数据通过网络传输. 底层java+cljoure构成, ...

  3. spring(四):IoC

    IoC-Inversion of Control,即控制反转 IoC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制. 理解IoC的关键:"谁控制谁,控制什么,为何是反 ...

  4. array.find()方法

    //array.find(function(currentValue, index, arr),thisValue) 方法说明 let tempArray = [ {"key":1 ...

  5. 快速排序 QuickSort (C++迭代,递归)

    /* * QuickSort.h * 快速排序(将每一个元素转换为轴点元素) * Created on: 2020年2月12日 * Author: LuYonglei */ #ifndef SRC_Q ...

  6. bzoj 4196:[NOI2015] 软件包管理器 (树链剖分)

    第一次做树剖 找同学要了模板 + 各种借鉴 先用dfs在划分轻重链并编号, install的时候就从查询的节点到根寻找标记的点有多少个,再用深度减去标记的点的个数,并把路径上所有点都标记 uninst ...

  7. D. Mahmoud and Ehab and another array construction task 因子分界模板+贪心+数学

    D. Mahmoud and Ehab and another array construction task 因子分解模板 题意 给出一个原序列a 找出一个字典序大于a的序列b,使得任意 \(i!= ...

  8. Java正则表达式提取String字符串中的IP地址

    /** * 正则提前字符串中的IP地址 * @param ipString * @return */ public static List<String> getIps(String ip ...

  9. 【转载】Java容器的线程安全

    转自:http://blog.csdn.net/huilangeliuxin/article/details/12615507 同步容器类 同步容器类包括Vector和Hashtable(二者是早期J ...

  10. Thinkphp中验证码不显示解决办法

    1.页面是否存在bom头, 2.入口文件中是否有define(‘APP_DEBUG’, TRUE); //是否开启调试模式,上线时请改为false