Javascript学习笔记:2种其他类型转换为数字Number类型的方式
①使用parseInt()/parseFloat()(在ECMAScript6中是Number.parseInt()/Number.parseFloat())
console.log(parseInt('a10'));//NaN
console.log(parseInt('1a0'));//
console.log(parseInt('10a'));//
console.log(parseInt('10'));//
console.log(parseFloat('a10.1'));//NaN
console.log(parseFloat('1a0.1'));//
console.log(parseFloat('10a.1'));//
console.log(parseFloat('10.1a'));//10.1
console.log(parseFloat('10.1'));//10.1
使用parseInt()/parseFloat将非数值类型转换为数值类型的时候:
a、如果是字符串类型,那么会对字符串中的字符逐个进行解析,直至解析到不能解析为数字的字符为止,然后将前面解析的部分转换为数值返回
b、如果是字符串类型以外的非数值类型,那么会首先调用该类型的toString()方法,然后再按字符串的方式进行转换
下面这个例子中,Person1使用默认的toString方法,Person2重写了toString方法。然后对两个类型的实例进行数值转换,结果如下:
function Person1(name,age){
this.name=name;
this.age=age;
}
function Person2(name,age){
this.name=name;
this.age=age;
//重写toString方法
this.toString=function(){
return this.age;
}
}
var p1=new Person1('张三',24);
var p2=new Person2('张三',24);
console.log(p1.toString());//[object Object]
console.log(parseInt(p1));//NaN
console.log(p2.toString());//
console.log(parseInt(p2));//
当然parseInt()和parseFloat()也是有区别的,从字面意思就可以看出,parseInt()是将值转换为整型,parseFloat()是将值转换为浮点型,除此之外,两者的转换机制都是一样的。
console.log(parseInt('1.5'))//
console.log(parseFloat('1.5'))//1.5
②使用‘+’运算符(等同于Number())
console.log(+'a10');//NaN
console.log(+'1a0');//NaN
console.log(+'10a');//NaN
console.log(+'10');// console.log(+'a10.1');//NaN
console.log(+'1a0.1');//NaN
console.log(+'10a.1');//NaN
console.log(+'10.1a');//NaN
console.log(+'10.1');//10.1
使用‘+’运算符与使用Number的效果是一样的。实际上,当‘+’运算符后面的部分是非数字时,该操作符会像Number()转型函数一样对后面的值进行转换。下面是使用Number()的结果。
console.log(Number('a10'));//NaN
console.log(Number('1a0'));//NaN
console.log(Number('10a'));//NaN
console.log(Number('10'));//
console.log(Number('a10.1'));//NaN
console.log(Number('1a0.1'));//NaN
console.log(Number('10a.1'));//NaN
console.log(Number('10.1a'));//NaN
console.log(Number('10.1'));//10.1
当使用‘+’运算符或者Number()函数将非数值类型转换为数值类型的时候:
a、如果非数值类型为Boolean类型时,如果值为true,那么返回1;如果值为false,那么返回0
b、如果非数值类型为String类型时,需要分以下几种情况:
b1、如果字符串为空,那么直接返回0
b2、如果字符串全是数字(包括小数),那么直接转换为数值(如果字符串开头为0,则忽略开头的0)
b3、如果字符串是有效的十六进制格式(即以‘0X’或者‘0x’开头,后面是0~F),那么将其转换为相同大小的十进制数值
b4、如果字符串包含有上述格式以外的字符,那么直接返回NaN
c、如果非数值类型为null时,那么直接返回0
d、如果非数值类型为undefined时,那么直接返回NaN
e、如果非数值类型为Symbol类型时,则直接抛出异常(TypeError: Cannot convert a Symbol value to a string)
f、如果非数值类型为Object类型时,那么首先会调用对象的valueOf()方法,然后依照前面的规则对其进行转换
Javascript学习笔记:2种其他类型转换为数字Number类型的方式的更多相关文章
- 1.2python基础_数字类型_数字(Number)类型
一.整型(int型.整数) 整型 等价于C中的有符号长整型(long) 与系统的最大整型一致(如32位机器上的整型是32位,64位机器上的整型是64位), 可以表示的整数范围在[-sys.maxint ...
- JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别
JavaScript:学习笔记(7)——VAR.LET.CONST三种变量声明的区别 ES2015(ES6)带来了许多闪亮的新功能,自2017年以来,许多JavaScript开发人员已经熟悉并开始使用 ...
- javascript学习笔记(四) Number 数字类型
数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数 toExponential() 方法 用科学 ...
- WebGL three.js学习笔记 6种类型的纹理介绍及应用
WebGL three.js学习笔记 6种类型的纹理介绍及应用 本文所使用到的demo演示: 高光贴图Demo演示 反光效果Demo演示(因为是加载的模型,所以速度会慢) (一)普通纹理 计算机图形学 ...
- JavaScript:学习笔记(2)——基本概念与数据类型
JavaScript:学习笔记(2)——基本概念与数据类型 语法 1.区分大小写.Test 和 test 是完全不同的两个变量. 2.语句最好以分号结束,也就是说不以分号结束也可以. 变量 1.JS的 ...
- Java程序猿的JavaScript学习笔记(8——jQuery选择器)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿JavaScript学习笔记(2——复制和继承财产)
计划和完成在这个例子中,音符的以下序列: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaSc ...
- JavaScript学习笔记[0]
JavaScript学习笔记[0] 使用的是廖雪峰JavaScript教程. 数据类型 Number 表示数字,不区分浮点整形. === 比较时不转化数据类型. == 反之. NaN与任何值都不想等, ...
- Java程序猿的JavaScript学习笔记(1——理念)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
随机推荐
- 1.初识Linux
1.严格来讲,Linux不是一个操作系统,只是Linux系统的内核,它是计算机的软件与硬件连通的枢纽. 2.关机和重启指令 关机:(1)init 0 关闭前清理和更新有关信息 (2 ...
- H5点击事件兼容各种APP浏览器
https://github.com/Clouda-team/touchjs/blob/master/touch.min.js <script src="js/jquery.min.j ...
- js统计,然后去重例子
var list=new Array(); for(var i=0;i<result.length;i++){ examsubject=result[i].examsubject; list.a ...
- 基于spring的aop实现读写分离与事务配置
项目开发中经常会遇到读写分离等多数据源配置的需求,在Java项目中可以通过Spring AOP来实现多数据源的切换. 一.Spring事务开启流程 Spring中通常通过@Transactional来 ...
- cs
cs <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...
- ubuntu安装libxml2--PC端
莫名其妙的安装了libxml2,其实电脑本身就有的,不知道有木有影响 具体安装步骤:1.解压:$tar zxvf libxml2-2.9.4.tar.gz //解压在了/home/newday/下 ...
- Ubuntu 16.04 Steam
Ubuntu 16.04安装Steam,直接去Steam官网下载客户端安装包即可.
- R语言学习-基础篇
从五月10日开始自学R in action,将我的学习所得逐渐发布在博客上. chapter1.新手上路 工作空间:存储着所有用户定义的对象(向量,矩阵,函数,数据框,列表): 当前的工目录保存是R用 ...
- Android 音量调节
对于Android的音量调节,可以分为按键调节音量和设置中调节音量.我们首先说一说设置中的音量调节. 一.音量的分类: 1.AudioManager.STREAM_VOICE_CALL 2.Audio ...
- 在Ubuntu 12.04下采用apt-get的方法安装Qt4
在Ubuntu 12.04下采用apt-get的方法安装Qt4 注:之前发表的一篇博客是采用编译源码的方式安装Qt4,这是很有用的方式,因为源码安装对于所有系统都是通用的,其次,在使用交叉编译器的时候 ...