• Number()
  • parseInt()
  • parseFloat()
  • Boolean()
  • String()
  • toString()

一、显式类型转换

-------Number()函数把对象的值转换为数字。(全局函数)

如果对象的值无法转换为数字,那么 Number() 函数返回 NaN。

语法:

Number(object)
//objert可选。一个 JavaScript 对象。如果没有提供参数,则返回0。

转换规则:

将字符串类型数字转换成数字类型(Number)的数。

可以将Boolean类型值转换成0或1;不可以将字符串的“true”和“false”转换成数字,而是转换成NaN。

可以将空字符串“”、空数组[]和null换成0。

可以将Date对象转换成1970 年 1 月 1 日至今的毫秒数。

可以将数组长度为1的数组,且第一个元素是数字的数组转换成该数字元素(可以是字符串类型)的数字类型数字。

其他一切值都转换成NaN。

-------parseInt()函数可解析一个字符串,并返回一个整数。(全局函数)

语法:

parseInt(string, radix)

转换规则:

将小数做取整操作,不做四舍五入换算。

可以操作字符串类型的数字,包含开头数字开头的字符串(截断)。

其他值返回NaN。

例外:可以将非空数组,且第一个元素为数字的数组做相应的操作(这里是因为内部发生隐式转换)

parseInt()方法的第二个参数可以设置转换基底,既可以对操作的数字进行进制转换。

-------parseFloat()函数可解析一个字符串,并返回一个浮点数。(全局函数)

语法:

parseFloat(string)

转换规则:

将字符串数字转换成数字类型,即原数。

可以操作数字开头的字符串(截断)。

其他值返回NaN

例外:可以将非空数组,且第一个元素为数字的数组做相应的操作(这里是因为内部发生隐式转换)

-------String()函数把对象的值转换为字符串。(全局函数)

语法:

String(object)

转换规则:

除了自定义的对象以外,所有值都能转换成字符串形式。也就是执行Object.prototype.toString.call()方法的时候返回“[object Object]”的对象类型,采用String()进行类型转换时还是返回“[object Object]”。

其他的都能被转换成字符型时的参数:

function fn(){return 1;} ----> String(fn) -----> "function fn(){return 1;}"

var arr = new Array(1,2,3); -----> String(arr); -----> "1,2,3"

var reg = /^[a-zA-Z]+$/ig; -----> String(reg); -----> "/^[a-zA-Z]+$/gi"

var date = new Date(); ----> String(date); -----> "Fri Mar 08 2019 17:57:52 GMT+0800 (中国标准时间)"

var bool = true; -----> String(bool); -----> "true"

var num = 123; -----> String(num); -----> "123"

console.log(String(undefined)); -----> "undefined"

console.log(String(null)); ------> "null"

String() - String("") -------> ""

-------toString() ===>Number、Boolean、Array、RegExp 内置对象修重写了Object对象原型上这个方法,操作结果同等与String()方法对这些类型的值做转换操作。有部分功能有些改变。

可以理解为这些对象将String()封装到了私有对象原型上的toString()方法上了。

转换规则:

undefined和null不能使用这个方法(思考:语法-包装类),强行使用会报错;

当Number对象调用toString(radix)时,可以使用ardix参数指定进制转换,类似parseInt()方法的功能。

var a = 10; var b = 8;

a.toString(16); --->"a";

b.toString(8);---->"10"

-------Boolean()将所有数据类型的值转换成boolean类型,除了undefined、null、NaN、""、0、false这六个值以外都是转换成true,值得注意的是字符串“false”返回的也是true。

二、隐式类型转换

-------isNaN() :检测参数是否是非数值。是非数值返回true,反之false。

原理:先将参数用Number()转换成数字类型(number),如果转换失败即值为NaN,转换成功即为数值,再将值与NaN进行判断,Number()返回NaN时,isNaN则返回true。

-------++ / --   + / -

一元正负的隐式转换:

原理:加加与减减的操作会先将要执行加减的值类型进行类型转换,即Number()操作。再进行加加减减的操作,并且返回一个number类型的结果(值)。

将任意数据类型的数据进行(+/-)正负操作时,原理同上。

------- +

加号的隐式转换:

原理:当两侧的数据类型其中有一个是string类型,就会将非string类型的数据进行String()操作,在执行拼接操作。

------- -*/%

减号、乘号、除号、摩尔的隐式类型转换:

原理:在执行对应操作之前,先将两侧的数据都执行Number()的数据类型转换操作。

------- && || !

与、或、非的隐式类型转换:

原理:在条件运算之前,先将所有值都执行布尔类型转换Boolean(),再进行条件运算。

------- <  >  <=  >=

比较符的隐式类型转换:

原理:比较的两个值其中有一个是数字的话,就将另一个执行Number(),再执行比较运算。

字符串与字符比较其比较的是ascll码。(比较规则是逐个字符比较,直到比较出大小就返回结果)

所有含有NaN的大小比较最终的返回值都是false。

null >= 0 为 true 的这种比较结果,再ECMAScript中还规定,如果<为false,则 >= 为true。

下面的内容了解就好:比较对象是否相同可以采用JSON.stringify(obj)手动转换成字符串来实现比较,除了能被Number()转换成数字以外的值都会在Number()转换时变成NaN,所以都会返回false,至于>= 这个机制不在隐式类型转换机制内。

var a = {}, b = {};
a > b -------> false;

a < b -------> false;
a == b -------> false;

a >= b ------> true;

b >= a ------> true;

这就是当 < 判断为false时,就会默认 >= 为false。

------- == !=

等于,非等于的隐式类型转换:

原理:正常情况下都是将对比数转换成Number类型在进行比较。

如果x或y中有一个为NaN,则返回false;

如果x或y皆为null或udefined中的一种类型,则返回true(null == undefined // true),否则返回false(null == 0 // false)。

部分内容在大小比较原理中一起阐述了。

------- [] == ![] 的比较运算:

原理:首先[]为对象,则调用ToPrimitive函数将其转换为字符串“”,对于右侧的![],首先进行显示类型转换(boolean),将其转换成false。然后在比较运算中,会将运算两侧的运算对象都转换成数值类型,及转换成0,因此最终返回true。

------- === !== 不进行隐式类型转换,直接比较两个值是否完全相同。

类型和原生函数及类型转换(三:终结js类型转换)的更多相关文章

  1. 类型和原生函数及类型转换(二:终结js类型判断)

    typeof instanceof isArray() Object.prototype.toString.call() DOM对象与DOM集合对象的类型判断 一.typeof typeof是一个一元 ...

  2. JavaScript(三)数据类型转换

    类型转换JavaScript中的取值类型非常灵活,如当JavaScript期望使用一个布尔值的时候,你可以提供其它数据类型的,JavaScript将根据需要自行转换数据类型.如下示例: 10 + “o ...

  3. 《You dont know JS》原生函数

    原生函数 原生函数,即JavaScript的内建函数(built-in function).常用的原生函数有String().Number().Boolean().Array().Object().F ...

  4. 深入理解javascript函数系列第三篇——属性和方法

    × 目录 [1]属性 [2]方法 前面的话 函数是javascript中的特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本 ...

  5. Swift2.0 中的String(三):类型转换

    本系列第三篇,String相关的类型转换.其他的几篇传送门(GitHub打不开链接的同学请自行把地址github改成gitcafe,或者直接去归档里找:-P): Swift2.0 中的String(一 ...

  6. 《你不知道的JavaScript》整理(五)——值与原生函数

    一.值 1)数字 JavaScript只有一种数值类型:number(数字),包括"整数"和带小数的十进制数. //数字的语法 a.toExponential(); // &quo ...

  7. C#中,三种强制类型转换的对比

    在C#中,我们可以看到三种强制类型转换,比如强制转换成有符号32位整型,可以找到下面三种方式: ① (int)()                ②Convert.ToInt32()          ...

  8. JS的原生函数

    常用的原生函数有: String() Number() Boolean() Array() Object() Function() RegExp() Date() Error() Symbol() 1 ...

  9. 深入理解javascript函数系列第三篇

    前面的话 函数是javascript中特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本文是深入理解javascript函数 ...

随机推荐

  1. 让 Windows7 - 64bit 支持 VC++ 6.0 的解决方法(无法启动此程序,因为计算机中丢失 MSVCRTD.dll。尝试重新安装该程序以解决此问题)

    源地址:https://www.cnblogs.com/poissonnotes/p/4372136.html 无法启动此程序,因为计算机中丢失 MSVCRTD.dll.尝试重新安装该程序以解决此问题 ...

  2. Boosting Static Representation Robustness for Binary Clone Search against Code Obfuscation and Compiler Optimization(二)

    接着上篇Asm2Vec神经网络模型流程继续,接下来探讨具体过程和细节. 一.为汇编函数建模  二.训练,评估   先来看第一部分为汇编函数建模,这个过程是将存储库中的每一个汇编函数建模为多个序列.由于 ...

  3. Python 位操作运算符

    & 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 (a & b) 输出结果 12 ,二进制解释: 0000 1100 | 按位或运算符:只要对应的二 ...

  4. 浏览器仿EXCEL表格插件 版本更新 - 智表ZCELL产品V1.3发布

    智表(zcell)是一款浏览器仿excel表格jquery插件.智表可以为你提供excel般的智能体验,支持双击编辑.设置公式.设置显示小数精度.下拉框.自定义单元格.复制粘贴.不连续选定.合并单元格 ...

  5. C# for循环或者foreach往List中添加对象的时候前面的数据总被最后加入的覆盖

    昨天我旁边小姐姐遇到一个问题,就是在执行for循环往list添加数据的时候,前面的数据信息总是被后面的数据信息所覆盖.  这样编写就会造成这样的数据效果:(所有的数据都会被覆盖)     问题原因:对 ...

  6. Java 通过地址获取经纬度 - 高德地图

    一.添加依赖 <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-v ...

  7. JavaScript代码组织结构良好的5个特点

    JavaScript代码组织结构良好的5个特点,随着JavaScript项目的成长,如果你不小心处理的话,他们往往会变得难以管理.我们发现自己常常陷入的一些问题: 当在创建新的页面时发现,很难重用或测 ...

  8. zabbix proxy部署

    一.概述 环境: 因为公司需要监控远程客户机,但server端无法主动连接agent端,客户端可以连接公司ip 公司有固定ip,可以开放某个端口给zabbixserver,客户机agent端可以主动通 ...

  9. cumprod、prod函数

    1.prod函数 prod函数用于求矩阵元素的积,其调用格式如下. (1)B=prod(A):若A为向量,则返回所有元素的积:若A为矩阵,则返回各列所有元素的积. (2)B=prod(A,dim):返 ...

  10. flask(一)之路由和视图

    01-介绍 Flask 是一个 Python 实现的 Web 开发微框架,同时具有很强的扩展能力. 02-第一个flask程序 # 初始化 from flask import Flask, url_f ...