• Number
  • 整数
  • 小数(浮点数)
  • 小数参与运算
  • NaN
  • 其他数据类型转换成数字
  • String
  • 其他数据类型转换成字符串
  • Number、Boolean、String的相同点

 

 

Number


虽然数字是没有范围的,但计算机能够储存的数字是有范围的,这个范围是-2^53 ~ 2^53(了解就好),如果超过了这个范围,计算机会返回无穷。

整数


三种表示方法:十进制、八进制(0~)、十六进制(0x~)

建议:

1, 尽量使用十进制,尽量少用十六进制(除了特殊运算),尽量不用八进制(ES5严格模式下会报错);

2, 在开发中别使用太大或太小的整数,尽量不要超过十六位。超过十六位的数字在 JS 中会采用科学计数法的方式表示。

3, 总结起来其实就是正常使用整数就行,正常开发中一般不用担心。

小数(浮点数)


1, 小数点前面的0可以省略: 0.5可以写成 .5(在 CSS 中也可以这样写),但是不建议。

2, 小数点后面没有数字或者全是0的话,这个小数会被转换成整数。这样做是为了节省空间,因为保存小数需要的空间是保存整数的两倍。

3, 如果小数点后面的0超过6位的话,这个数会被转换成科学计数法表示。

小数参与运算


alert(0.1 + 0.2 === 0.3)  // false

Number类型使用 IEEE754 格式来表示整数和浮点数。

不是所有小数都可以用二进制表示出来的,如果计算机无法精确地表示一个小数,它只能用一个无限近似的数来代替。在上面的计算中, 0.1和0.2在被转换成二进制时由于计算机无法把它们精确地表示出来,只能使用近似值代替,所以产生了误差。因此建议永远不要直接比较小数,这样做很有可能得不到准确的结果。如果必须要比较小数的话,可以先把小数转换成整数,运算后再转换回小数。

alert((0.1 * 10 + 0.2 * 10)/10 === 0.3);  // true

对精度要求不是特别高的时候可以使用toFixed(),把后面的小数忽略掉。

alert((0.1 + 0.2).toFixed() === 0.3.toFixed());  // true

注意toFixed()返回的是字符串。

涉及小数的运算中,还要特别注意书写顺序,随意更改这个顺序也有可能造成误差。

例如在购物商城买了三件单价为17.45的商品,打九折,如果在下单页面是这样子计算的的:17.45*3*0.9 = 47.114999999999995,而在结账页面是这样子的:0.9*17.45*3 = 47.115,(注意数字的顺序不一样),这时候如果使用toFixed(2) 会出现问题,两个结果会相差一分钱。

建议:书写顺序不要随意改变,如果想要更准确一点,可以先把小数转换成整数再做运算,然后再把结果转换回小数。

NaN


在 JS 中,凡是数字都可以参与计算,而且任何数字除以0都会返回无穷,只有一个例外,0除以0会返回NaN;NaN 的字面意思虽然是not a number(不是一个数字),但它实际上是一个数字,它是一个不等于任何数字的数字,而且它也不等于它自己(这是 JS 中唯一一个与自身不相等的值)。我们可以使用 isNaN() 可以用来检测一个值是否是NaN,但这个函数的真正用途其实是用于判断传入参数是否可以转换成数字,可以的话会返回false,不可以就返回true。

其他数据类型转换成数字


Number() 可以把任何类型转换成数字,返回值是普通数字或NaN(其实它也是一个数字);

parseInt() 、parseFloat() 用于处理字符串,建议使用时始终把10作为第二个参数,表示传进来的值是十进制的,因为我们平时使用的多为十进制的数字;

String


推荐使用单引号,因为有时会把 JS 和 HTML 混合一起写,而 HTML 是使用双引号的,所以在 JS 中对字符串使用单引号可以避免引号闭合错误的情况。

常用的转义符:\n(换行符) 和 \u(表示Unicode编码);

关于中文字符串:

'高级程序设计'.length;  //

字符串是不可变的(其实任何基础类型都是不变的):

var abcd = ‘abcd’;

abcd.length = 5;

alert(abcd.length);  //

碰到点(.)的时候 JS 会先把点前面的数据转换成对象,再对这个对象调用方法,之后把这个对象销毁。所以上面 abcd.length = 5; 和 alert(abcd.length); 并不是操作同一个对象,而是分别操作两个不同的临时的对象,这两个对象在操作完成之后都马上被销毁了,操作结果不会被保存。

其他数据类型转换成字符串


toString() 可以把除了null 和undefined 之外的其他数据转换成字符串;

String() 则可以把所有数据转换成字符串;

 

Number、Boolean、String的相同点


  • 都有一个和自己同名的函数,可以进行数据转换;
  • 这些函数的首字母都是大写的;
  • 这三个函数都可以接收任意类型的参数,可以把所有数据转换成对应的数据类型;
  • 转换结果和自己的类型对应,如Number会把数据转换成数字;
  • 结果基本都可以分成两类:Boolean是true和false;Number是普通数字和NaN(其实也是一个数字);String是字符串和’[object, Object]’(对象);

整理自沙翼老师的前端音频教程#陪你读书#第五期(喜马拉雅)

(真心推荐有缘分看到我博客的人儿去听听啦~)

Number and String in JS的更多相关文章

  1. 实现一个函数clone,可以对JS中的5种数据类型(Number、String、Object、Array、Boolean)进行值复制

     实现一个函数clone,可以对JS中的5种数据类型(Number.String.Object.Array.Boolean)进行值复制

  2. convert number or string to ASCII in js

    convert number or string to ASCII in js ASCII dictionary generator // const dict = `abcdefghijklmnop ...

  3. 实现一个函数clone,使JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制

    实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number.String.Object.Array.Boolean)进行值复制. 1 /** 对象克隆 2 * 支持基本 ...

  4. JavaScript之Number、String、Array常用属性与方法手册

    Number isFinite函数 Number.isFinite() 方法用来检测传入的参数是否是一个有穷数(finite number). 语法: Number.isFinite(value) 例 ...

  5. JavaScript封装方法,兼容参数类型为Number和String

    /** * 依据Kind确定跳转到目标列表页面. * @param kind */ function gobackByKind(kind) { var kindStr = String(kind); ...

  6. JavaScript数据类型-2---Undefined、 Null、 Boolean、 Number、 String.

    学习目标 1.掌握JavaScript的数据类型 2.掌握typeof操作符 3.掌握Undefined 4.掌握null JavaScript的数据类型 ECMAScript中有5种简单数据类型(也 ...

  7. javascript基础知识梳理-Number与String之间的互相转换【转】

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. vue type check failed for prop . Expected Number, got String

    代码是:fileNumLimit接收的类型是Number <vue-upload fileNumLimit='100'/> 改为 <vue-upload :fileNumLimit= ...

  9. 基本包装类型Boolean、Number、String特性及常用方法

    基本包装类型:Boolean.Number.String 一.String 字符串常用方法 1.indexOf()  lastIndexOf()  返回相应字符的索引号 2.slice(index1, ...

随机推荐

  1. 环境准备—之—linux下安装python3和pip3

    转自 上海悠悠 https://www.cnblogs.com/yoyoketang/p/10195102.html 前言 centos7 自带有 python,但是却是 python2 版本的 py ...

  2. Asp.net core Identity + identity server + angular 学习笔记 (第四篇)

    来说说 RBAC (role based access control) 这是目前全世界最通用的权限管理机制, 当然使用率高并不是说它最好. 它也有很多局限的. 我们来讲讲最简单的 role base ...

  3. NGS概念大科普(转)

    NGS又称为下一代测序技术,高通量测序技术 以高输出量和高解析度为主要特色,能一次并行对几十万到几百万条DNA分子进行序列读取,在提供丰富的遗传学信息的同时,还可大大降低测序费用.缩短测序时间的测序技 ...

  4. Spring Boot 返回 JSON 数据,一分钟搞定!

    如何返回 JSON 数据? 在 Spring Boot 中返回 JSON 数据很简单,如下几步. 加入依赖 12345678910 <parent> <groupId>org. ...

  5. 单源最短路径Dijkstra和优先级算法

    百度百科:迪杰斯特拉算法. 代码实现如下: import java.util.Comparator; import java.util.PriorityQueue; import java.util. ...

  6. 修改 jenkins 主目录

    说明 Jenkins有时需要进行迁移,主目录会发生改变,本文主要讲解如何更改主目录.由于jenkins安装方式的不同,主目录也不一样.本测试环境:Centos6.8 X64.注意:在更改主目录之前,请 ...

  7. Android模拟器Genymotion使用

    介绍 Genymotion是一款出色的跨平台的Android模拟器,具有容易安装和使用.运行速度快的特点,是Android开发.测试等相关人员的必备工具. 官网地址:https://www.genym ...

  8. 使用Microsoft SyncToy 文件同步/备份 自动化处理

    SyncToy 是由 微软 推出的一款免费的文件夹同步工具.百度搜索Microsoft SyncToy,官网可以直接下载 安装完成后 操作也非常简单,主要有三种模式 synchronize :在这个模 ...

  9. 可迭代对象 TO 迭代器

    可迭代对象并不是迭代器,只是支持迭代.可被for循环遍历的对象,比如list,dict ,tuple ,string都是可迭代对象 那既然支持迭代,那要如何用迭代替换for循环呢? 内置函数 iter ...

  10. 客户端与服务器之间通信收不到信息——readLine()

    写服务器端和客户端之间通信,结果一直读取不到信息,在https://blog.csdn.net/yiluxiangqian7715/article/details/50173573 上找到了原因:使用 ...