从哪几个方面来掌握Number类型?
首先,明确一点:变量没有类型,有类型的是变量的值。变量用来存储各个类型的值。
一.Number类型的基本概念
Number类型的值有两种:整数值和浮点数值(浮点数值在某些语言中也被成为双精度数值double-precision)。这两种数值都是用IEEE754格式来表示的。
二.Number类型数值字面量格式有哪些?
1.十进制整数。
最基本的数值字面量格式。
var intNum = 55;//十进制整数
2.八进制。
八进制字面值的两个组成部分:第一位必须是零(0),然后是八进制数字序列(0~7)。
八进制使用注意:如果字面值的数值超出了范围,那么前面的零被忽略,后面的数值当做十进制来解析。
var octalNum1 = 070;//八进制的070,十进制的56
var octalNum2 = 079;//字面值“9”超出范围,无效八进制,解析为79
var octalNum3 = 08;//无效的八进制,解析为8
3.八进制字面量在严格模式(strict mode)下是无效的,会导致支持的JavaScript引擎抛出错误。
4.十六进制。
十六进制字面值的前两位必须是0x,后跟任何十六进制数字(0~9及A~F)。其中,字母A~F可以大写,也可以小写。
var hexNum1 = 0xA;// 十六进制的10
var hexNum2 = 0x1f;// 十六进制的31
5.八进制、十六进制和十进制之间的关系。
在进行算术计算时,所有以八进制和十六进制表示的数值最终都将被转换成十进制数值。
0xA + 070;//66
三.浮点数值
1.什么是浮点数值?
所谓浮点数值,就是该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。两大必须的组成部分。
var floatNum1 = 1.1;
var floatNum2 = 0.1;
var floatNum3 = .1; //有效,但是不推荐
2.浮点数值和整数值之间有什么关系?
它们之间有转换关系,浮点数值向整数值的转换。
- 保存浮点数值需要的内存空间是保存整数值的两倍。
- ECMAScript会不失时机地将浮点数值转换为整数值。
- 转换条件有两种:小数点后没有跟数字,浮点数本身表示一个整数(如1.0)。
//可以在浏览器控制台进行验证
var floatNum4 = 1.; //解析为1,按照前面的观点,“1.” 其实不算是个浮点数,因为小数点后没有数字。
var floatNum5 = 10.0; //解析为10
3.浮点数值和极大、极小数值之间有什么关系?
它们之间关系就在于科学计数法的表示。
极大数值的表示:
var floatNum = 3.125e7; //等于31250000,表示,3.125乘以,10的7次方。当然,科学计数法前面的数也可以是整数值。
极小数值的表示:
var a = 0.00000000000000003;
console.log(a);//3e-17
0.00000000000000003可用3e-17来表示。
在默认情况下,ECMASctipt会将那些小数点后面带有6个零以上的浮点数值转换为以e表示法表示的数值。可在浏览器控制台进行验证。
4.IEEE754浮点数值的通病:
0.1 + 0.2; // 等于0.30000000000000004
// 所以不要做这样的测试!
if (a + b == 0.3){
alert("You got 0.3.");
}
//另外
0.05 + 0.25; //0.3 没问题
0.15 + 0.15; //0.3 没问题
通病有什么解决办法?
通过比较,两个数差值的绝对值和一个叫Machine Epsilon的数值来进行比较。通常这个数值为2^-52 (2.220446049250313e-16)。
在ES6中,Number.EPSILON就是表示这个数。附上代码:
//安全性检测
if (!Number.EPSILON) {
Number.EPSILON = Math.pow(2,-52);
}
function numbersCloseEnoughToEqual(n1,n2) {
return Math.abs( n1 - n2 ) < Number.EPSILON;
}
var a = 0.1 + 0.2;
var b = 0.3;
numbersCloseEnoughToEqual( a, b ); // true
numbersCloseEnoughToEqual( 0.0000001, 0.0000002 ); // false
四.数值范围
1. 数值范围。
最小数值:Number.MIN_VALUE。大多数浏览器是5e-324。
最大数值:Number.MAX_VALUE。大多数浏览器是1.7976931348623157e+308。
2. 超出范围的数值如何表示?
用特殊的Infinity值来表示。
正数超出范围后,数值自动转换为Infinity(正无穷)。Infinity存放于Number.NEGATIVE_INFINITY中。
负数超出范围后,数值自动转换为-Infinity(负无穷)。-Infinity存放于Number.POSITIVE_INFINITY中。
Infinity是个数值,但是不能参与数值计算。
typeof Infinity; //"number"
3. 如何判断一个数是否在有效范围内?
用isFinite()方法。
var result = Number.MAX_VALUE + Number.MAX_VALUE;
alert(isFinite(result));//false
五.NaN
1.NaN的基本概念
NaN,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。
2.NaN的两个不同寻常的特点是什么?
- 任何涉及NaN的操作(例如NaN/10)都会返回NaN,这个特点在多步计算中有可能导致问题。
- 其次,NaN与任何值都不相等,包括NaN本身。
alert(NaN == NaN); //false
3.isNaN()的用法
判断这个参数是否“不是数值”。
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false
alert(isNaN("10")); //false "10"转换成了10
alert(isNaN("blue")); //true
alert(isNaN(true)); //false, true被转化成1
六.数值转换
数值转换用到3个函数:Number()、parseInt()和parseFloat()。
1.Number()的转换规则
- Boolean: true -> 1 ;false -> 0;
- 数字,简单的传入和传出
- null -> 0
- undefined -> NaN
- String类型的值:
- "1" -> 1
- "011" -> 11 //前面的0被忽略
- "1.1" -> 1.1
- 字符串包含十六进制,会转换成十进制。Number("0x1f");// 31
- "" -> 0 空转换成0
- 除以上格式,其余都转换成NaN
- Object 如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值。
总结:Number()函数在转换字符串时比较复杂而且不够合理,因此在处理整数的时候更常用的是parseInt()函数。
2.parseInt()的转换规则
- 如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN
parseInt("dd12"); //NaN
parseInt(""); //NaN
Number(""); // 0
- 如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。
parseInt("1234ddd"); //1234
parseInt("33.3"); //33 "."不是有效的数字字符。
- parseInt八进制在ES3和ES5有区别
//ECMAScript 3认为是56(八进制),ECMAScript 5认为是0(十进制)
var num = parseInt("070");
- 消除上述困惑,需要添加基数
var num = parseInt("0xAF", 16); // 175
- parseInt转换十六进制数需注意:如果指定了16作为第二个参数,字符串可以不带前面的"0x"
var num1 = parseInt("AF", 16); //175
var num2 = parseInt("AF"); //NaN
- 最佳实践:多数情况下,我们要解析的都是十进制数值,因此始终将10作为第二个参数是非常必要的。
3.parseFloat()的用法
- 转换规则:
parseFloat()也是从第一个字符(位置0)开始解析每个字符。而且也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。
parseFloat("22.3.2"); // 22.3
-
parseFloat和parseInt的区别
parseFloat()只解析十进制值,因此它没有用第二个参数指定基数的用法。
十六进制格式的字符串则始终会被转换成0。
//1234 (整数)
var num1 = parseFloat("1234blue");
//0
var num2 = parseFloat("0xA");
//22.5
var num3 = parseFloat("22.5");
//22.34
var num4 = parseFloat("22.34.5");
//908.5
var num5 = parseFloat("0908.5");
//31250000
var num6 = parseFloat("3.125e7");
相关推荐
- 基本类型:ECMAScript 5.1中有五种基本数据类型,包括Undefined、Null、Boolean、Number和String,以及一个特殊类型Object。 - 引用类型:Object类型是所有复杂数据结构的基础,包括数组、函数和自定义对象。 -...
ECMAScript是现代Web开发的基础之一,掌握了其核心概念如对象类型、基本包装类型、Global对象以及Math对象,能够帮助开发者更好地理解和运用JavaScript语言。在实际开发过程中,合理利用这些特性可以极大地提高代码...
JavaScript,作为全球最广泛使用的编程语言之...《JavaScript权威指南-ECMAScript5.pdf》这本书将详细解析这些概念,并进一步探讨高级话题,如异步编程、性能优化、调试技巧等,帮助读者深入理解并熟练掌握JavaScript。
通过以上这些内容的学习,你将能够掌握ECMAScript的基本用法,为进一步深入学习Web开发或JavaScript框架打下坚实的基础。记住,实践是检验真理的唯一标准,理论知识结合实际编程练习,会让你对ECMAScript有更深刻的...
### ECMAScript基础知识详解 #### 一、ECMAScript简介 ECMAScript 是 JavaScript 的核心规范,由...通过掌握 ECMAScript 的基础知识,开发者能够更深入地理解 JavaScript 的工作原理,并能够灵活应对各种编程挑战。
在这个压缩包中,我们可以预见到一系列关于Number类型及其相关知识点的问题。以下是对这些知识点的详细阐述: 1. **Number 类型** JavaScript中的Number类型用于表示数值,包括整数和浮点数。它遵循ECMAScript规范...
总之,掌握ECMAScript中的原始类型对于开发高质量的JavaScript代码至关重要。正确理解和使用Undefined、Null、Boolean、Number和String等基本类型,以及能够熟练运用typeof运算符进行类型检查,是每个JavaScript...
要深入理解和使用ECMAScript,你需要掌握其基本语法、理解变量作用域、熟悉各种数据结构和操作方法、掌握函数和对象的用法、了解模块系统和异步编程。同时,不断关注新版本的更新,以便及时掌握最新的特性和最佳实践...
2. **类型系统**:ES3有七种基本数据类型:Undefined、Null、Boolean、Number、String、Object和Symbol(ES6新增)。其中,Undefined和Null是特殊值,其余是原始类型。所有对象都基于Object类型。 3. **变量与作用...
- `Number`类型是ECMAScript中的六种基本数据类型之一,另外五种为`Undefined`、`Null`、`Boolean`、`String`和`Symbol`(ES6新增)。 - JavaScript中的`Number`类型是基于IEEE 754标准的双精度64位浮点数格式,...
理解这些类型转换的规则对于编写健壮的JavaScript代码至关重要,因为JavaScript是一种动态类型语言,变量的类型在运行时可能会发生变化。因此,了解并熟练掌握这些转换机制能帮助开发者更好地控制和预测代码的行为。
检测一个值是否为有效数字,可以使用isNaN函数,但需要注意,isNaN会尝试将非number类型转换为number再进行判断。Number函数可以强制转换其他类型为number,而parseInt和parseFloat用于非强制性地将字符串转换为数字...
基本包装类型是原始数据类型的包装形式,如Number对象是number原始数据类型的包装形式。教学中以Number对象为例,从基本存储结构、赋值操作、实例的创建、属性和方法等几个方面来分析它们的区别。 三、原型链的理解...
这篇文章将带你深入理解ES6的关键知识点,帮助你更好地掌握前端开发必备技能。 1. **搭建运行ES6的环境** 在开始学习ES6之前,你需要确保有一个支持ES6语法的运行环境。这通常通过使用现代浏览器(如Chrome、Fire...
在准备 TypeScript 的面试时,了解其与 JavaScript ...理解并掌握以上 TypeScript 的关键知识点,将有助于你在面试中表现出对语言深入的理解和熟练应用。在准备面试时,不仅要注意理论知识,还要通过实践来巩固和提高。
根据给定的信息,以下是对各个知识点的详细解读: ### ECMAScript规范的理解 - **ECMAScript定义的内容**:...这些知识点涵盖了ES6中的一些核心概念和技术细节,对于理解和掌握现代JavaScript编程至关重要。
《JavaScript高级程序设计》阅读笔记(三)主要探讨了ECMAScript中的引用类型,特别是Object类及其派生的Boolean、Number和String类。引用类型在JavaScript中扮演着至关重要的角色,因为它们允许我们创建复杂的数据...
同时,学习技巧也变得尤为重要,如理解DOM操作、熟悉浏览器工作原理、掌握数据类型和控制流等。 JavaScript自身由语法、类型系统和DOM操作三部分组成。在JS中,变量可以通过var、let、const等方式声明,遵循特定的...