IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> JavaScript基础学习篇(六)——细说数据类型(下) -> 正文阅读

[JavaScript知识库]JavaScript基础学习篇(六)——细说数据类型(下)

细说数据类型(下)

Number 类型

??ECMAScript 中最有意思的数据类型或许就是 Number 类型了。 Number 类型使用 IEEE 754 格式表示整数和浮点值(在某些语言中也叫双精度值)。

??最基本的数值字面量格式是十进制整数,直接写出来即可:

var demo = 55; // 整数 55

??整数也可以用八进制(以 8 为基数)或十六进制(以 16 为基数)字面量表示。对于八进制字面量,第一个数字必须是零(0),然后是相应的八进制数字(数值 0~7)。要创建十六进制字面量,必须让真正的数值前缀 0x(区分大小写),然后是十六进制数字(0~9 以及 A~F)。十六进制数字中的字母大小写均可(有关进制的转换可以自行了解学习)。

var demoNum1 = 070; // 八进制的 56
var demoNum2 = 079; // 无效的八进制值,当成 79 处理
var demoNum3 = 08; // 无效的八进制值,当成 8 处理
var demoNum4 = 0xA; // 十六进制 10
var demoNum5 = 0x1f; // 十六进制 31

??注意:由于 JavaScript 保存数值的方式,实际中可能存在正零(+0)和负零(-0)。正零和负零在所有情况下都被认为是等同的,这里特地说明一下。

浮点数

??要定义浮点值,数值中必须包含小数点,而且小数点后面必须至少要有一位数字。虽然小数点前面不是必须有整数,但最佳实践推荐加上。
??下面是几个例子:

var floatNum1 = 1.1;
var floatNum2 = 0.1;
var floatNum3 = .1; // 有效,值为0.1,但不推荐

??对于非常大或非常小的数值,浮点值可以用科学记数法来表示。ECMAScript 中科学记数法的格式要求是一个数值(整数或浮点数)后跟一个大写或小写的字母 e ,再加上一个要乘的 10 的多少次幂。
比如:

var floatNum1 = 3.125e7; // 等于 31250000 和3.125e+7是等效的 
var floatNum2 = 3.125e-7; // 等于 0.0000003125

0.1+0.2 = ?

??如果你问我,0.1+0.2 = ?,那么显然是0.3。但是,在 JavaScript 中可不是 0.3 。

var a = 0.1;
var b = 0.2;
console.log(a+b); // 0.30000000000000004

??如果两个数值分别是 0.05 和 0.25,得到的仍是我们想要的 0.3 ,但是 0.1 和 0.2 却不是。
??注意:之所以存在这种舍入错误,是因为使用了 IEEE 754 数值,这种错误并非 ECMAScript 所独有,其他使用相同格式的语言也有这个问题。所以在涉及浮点数的计算时要十分注意这种情况。

值的范围

??由于内存的限制, ECMAScript 并不支持表示这个世界上的所有数值。

??ECMAScript 可以表示的最小数值保存在Number.MIN_VALUE 中,这个值在多数浏览器中是 5e-324;可以表示的最大数值保存在Number.MAX_VALUE 中,这个值在多数浏览器中是 1.797 693 134 862 315 7e+308。如果某个计算得到的数值结果超出了 JavaScript 可以表示的范围,那么这个数值会被自动转换为一个特殊的 Infinity(无穷)值。

??任何无法表示的负数以 -Infinity(负无穷大)表示,任何无法表示的正数以 Infinity (正无穷大)表示。

NaN

??有一个特殊的数值叫 NaN,意思是“不是数值”( Not a Number )。

??用于表示本来要返回数值的操作失败了(而不是控制台抛出错误)。

举个例子:

console.log(0/0); // NaN
console.log(0/5); // NaN
console.log(5/0); // Infinity
console.log(5/-0); // -Infinity

??如果用 0 除任意数值会返回 NaN;而如果分子是非 0 值,分母是有符号 0 或无符号 0,则会返回 Infinity-Infinity

??如果你用数值和字符串一起做运算,也会返回 NaN

NaN 独特的属性

??首先,任何涉及 NaN 的操作始终返回 NaN(如 NaN/10),在连续多步计算时这可能是个问题。

??其次, NaN 不等于包括 NaN 在内的任何值。例如,下面的比较操作会返回 false

console.log(NaN === NaN); // false

??为此, ECMAScript 提供了 isNaN() 函数。该函数接收一个参数,可以是任意数据类型,然后判断这个参数是否“不是数值”。实际上,底层先调用 Number()将其中的参数先转换成数值。

console.log(isNaN(NaN)); // true
console.log(isNaN(10)); // false, 10 是数值
console.log(isNaN("10")); // false,可以转换为数值 10
console.log(isNaN("blue")); // true,不可以转换为数值
console.log(isNaN(true)); // false,可以转换为数值 1

数值转换

??有 3 个函数可以将非数值转换为数值: Number()parseInt()parseFloat() 。 Number() 是转型函数,可用于任何数据类型。后两个函数主要用于将字符串转换为数值。

Number()

??Number() 函数基于如下规则执行转换:

  • 布尔值, true 转换为 1, false 转换为 0。
  • 数值,直接返回相应的数值。
  • null,返回 0。
  • undefined,返回 NaN。
  • 字符串,应用以下规则:如果字符串包含数值字符,包括数值字符前面带加、减号的情况,则转换为一个十进制数值。忽略前面的
    零(所以不涉及八进制格式);如果字符串包含有效的浮点值格式如"1.1",则会转换为相应的浮点值(同样,忽略前面的零);如果字符串包含有效的十六进制格式如"0xf",则会转换为与该十六进制值对应的十进制整数值。如果字符串包含除上述情况之外的其他字符,则返回 NaN
  • 对象,调用 valueOf() 方法,并按照上述规则转换返回的值。如果转换结果是 NaN,则调用 toString() 方法,再按照转换字符串的规则转换。
var num1 = Number("Hello world!"); // NaN
var num2 = Number(""); // 0
var num3 = Number("000011"); // 11
var num4 = Number(true); // 1

parseInt() 和 parseFloat()

??考虑到用 Number() 函数转换字符串时相对复杂且有点反常规,通常在需要得到整数时可以优先使用 parseInt() 函数。

??parseInt() 函数更专注于字符串是否包含数值模式。字符串最前面的空格会被忽略,从第一个非空格字符开始转换,直到字符串末尾,或碰到非数值字符(包括小数点.)。如果第一个字符不是数值字符、加号或减号,parseInt() 立即返回 NaN 。这意味着空字符串也会返回 NaN (这一点跟Number()不一样,它返回 0)。parseInt()函数也能识别不同的整数格式(十进制、八进制、十六进制),实际上可以传入第二个参数表示进制。

举个例子:

var num1 = parseInt("1234blue"); // 1234
var num2 = parseInt(""); // NaN
var num3 = parseInt("0xA"); // 10 解释为十六进制整数
var num4 = parseInt(22.5); // 22,只会识别并转换整数部分
var num5 = parseInt("70"); // 70 解释为十进制值
var num6 = parseInt("0xf"); // 15 解释为十六进制整数

如果传入第二个参数:表示进制

var num1 = parseInt("10", 2); // 2,按二进制解析
var num2 = parseInt("10", 8); // 8,按八进制解析
var num3 = parseInt("10", 10); // 10,按十进制解析
var num4 = parseInt("10", 16); // 16,按十六进制解析

??parseFloat() 函数的工作方式跟 parseInt() 函数类似,都是从位置 0开始检测每个字符。同样,它也是解析到字符串末尾或者解析到一个无效的浮点数值字符为止。这意味着第一次出现的小数点是有效的,但第二次出现的小数点就无效了,此时字符串的剩余字符都会被忽略。注意 parseFloat() 只解析十进制值,因此不能指定底数,故也只有一个参数。

举个例子:

var num1 = parseFloat("1234blue"); // 1234,按整数解析
var num2 = parseFloat("0xA"); // 0,不识别 16 进制了
var num3 = parseFloat("22.5"); // 22.5
var num4 = parseFloat("22.34.5"); // 22.34,不识别第二个小数点
var num5 = parseFloat("0908.5"); // 908.5
var num6 = parseFloat("3.125e7"); // 31250000

String 类型

??字符和任何符号连成的串就是字符串(使用时,必须加上"",也可以使用’’ 或者模板字符串``)。字符串在 JavaScript 的使用非常广泛,加引号的数据一定是字符串,空字符 “” 和 一个空格字符 " " 是完全不同的两个字符串。

字面量

??经过个人总结,字面量就是不用 jsnew 操作符创建实例。在 JavaScript 中,字面量就是一种表示法,例如对象字面量、函数字面量、数组字面量等等。对象字面量就是一种方便地按指定规格创建新对象的的表示法。一般来说,字面量的写法较 new 操作符的写法更为简便且容易看懂。涉及字面量的一般与对象有关,后续作详细整理。

字符串字面量

??直接使用引号的方式就是字符串字面量。

举个例子:

var str1 = "hello";
var str2 = 'hi';
var str3 = `hello,hi`; // ES6 提出的模板字符串

转义字符 \

??字符串数据类型包含一些特殊的字符,用于表示非打印字符或有其他用途的字符。而这些符号需要用到 (\) 转义字符。例如,\n表示换行,\t表示一个制表符等。转义字符可以用在需要只表示字符本身意义的前面。

举个例子:

console.log('\t'); // 只有一个换行字符
console.log('\\t'); // "\t"

字符串转换

??有两种方式把一个值转换为字符串。首先是使用几乎所有值都有的 toString() 方法。这个方法唯一的用途就是返回当前
值的字符串等价物。toString() 方法可见于数值、布尔值、对象和字符串值。(没错,字符串值也有 toString() 方法,该方法只是简单地
返回自身的一个副本。) nullundefined没有 toString() 方法。
??这里的方法其实和函数是同一个含义,但是方法指的是对象本身拥有的一个特殊的函数,故和函数做区分,一般的方法只有对象或者变量本身才能调用,使用.的方式。

举个例子:

var num = 11;
var numAsString = age.toString(); // 字符串"11"
var bool = true;
var boolAsString = found.toString(); // 字符串"true"

??如果你不确定一个值是不是 nullundefined,可以使用 String() 转型函数,它始终会返回表示相应类型值的字符串。

举个例子:

var value1 = 10;
var value2 = true;
var value3 = null;
var value4;
console.log(String(value1)); // "10"
console.log(String(value2)); // "true"
console.log(String(value3)); // "null"
console.log(String(value4)); // "undefined"

Symbol、Bigint、Object 类型

??由于SymbolBigint类型是 ES6 之后才提出的,现在不做整理和阐述。而 Object类型身为唯一的一种引用数据类型,比较复杂,后面单独整理和阐述。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 11:49:36  更:2021-07-17 11:51:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年2日历 -2025/2/5 20:14:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码