在 JavaScript 中有一些 value 会经常碰到:

[] (空数组)、{} (空对象)、'' (空字符串)、undefined、null、0、NaN、Infinite

也会经常碰到数据类型转换:

==、+、-、>、<、

if(...) 真假判断、window[...] 属性

这几种情况下,就需要考虑数据类型转换。

碰到最多的是 true 和 false 判断:

if( [] ) console.log('true') /* 输出 true */

if( {} ) console.log('true') /* 输出 true */

对于空字符串、undefined、null、0 都是输出 false。

if( NaN ) console.log('true') /* 输出 false */

if( Number.POSITIVE_INFINITY ) console.log('true') /* 输出 true */

if( Number.NEGATIVE_INFINITY ) console.log('true') /* 输出 true */

还有根据 ==、+、-、>、< 等进行 true 和 false 判断

1、if( NaN != NaN ) console.log('true') /* 输出 true */

可以这么说: NaN 与任何值都是不相等的。还有更加极端的情况:

var d = NaN; if ( d === d ) console.log('true'); else console.log('false'); /* 输出 false */

自身不等于自身的还有 {} 和 [],空对象和空数组,与自身不是绝对相对相等容易理解(对象和数组都是引用类型),但:

var d = {}; if ( d === d ) console.log('true'); else console.log('false'); /* 输出 true,对于 [] 是一样的 */

{} == {},[] == [] /* 均输出 false */  显然 == 并不总是进行类型转换(只在两边的数据类型不相同的时候进行类型转换)。

2、undefined Infinity null 不存在 NaN (自身不等于自身) 的问题

3、undefined 与 null 相比较

undefined == null /* 输出 true */

4、以上各种数据类型与字符串进行比较

if( {} == "[object Object]" ) console.log('true') /* 输出 true */

if( [] == "" ) console.log('true') /* 输出 true */

var dxdxdx; if( dxdxdx == undefined ) console.log('true') /* 输出 true */

var dxdxdx; if( dxdxdx == "undefined" ) console.log('true'); else console.log('false'); /* 输出 false */

从以上语句可以看出,对于 undefined,未能自动使用类型转换(还有 null 和 NaN 都不能自动转换为字符串)。

var dxdxdx; if( dxdxdx+'' == "undefined" ) console.log('true'); else console.log('false'); /* 输出 true */

对于 null 来说:

var dxdxdx = null; if( dxdxdx == null ) console.log('true') /* 输出 true */

var dxdxdx = null; if( dxdxdx == "null" ) console.log('true'); else console.log('false'); /* 输出 false */

对于 undefined 和 null 来说,都可以用 dxdxdx == null 或者 dxdxdx == undefined 来判断。

5、以上各种数据类型转换为数字

也只有 字符串 类型对变量有转换为数字对需求,对于数组和对象转换成为数字,一般需要自行写接口进行转换。

6、toString 和 String

toString 用来检测变量对数据类型。

toString.call( [] ) /* "[object Array]" */

String 用来把变量转换为字符串。

String.call( [] ) /* "" */

7、类型转换还有 parseInt parseFloat

浅谈 JavaScript 中常用数据及其类型转换的更多相关文章

  1. 浅谈JavaScript中的闭包

    浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...

  2. 浅谈JavaScript中的null和undefined

    浅谈JavaScript中的null和undefined null null是JavaScript中的关键字,表示一个特殊值,常用来描述"空值". 对null进行typeof类型运 ...

  3. 浅谈JavaScript中的正则表达式(适用初学者观看)

    浅谈JavaScript中的正则表达式 1.什么是正则表达式(RegExp)? 官方定义: 正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去 ...

  4. 浅谈JavaScript中的Ajax

    引言 作为一名WEB开发者,我想Ajax技术是一定需要掌握的.你也许平时没有使用JavaScript真正的写过Ajax.但是你一定使用过JQuery里面的相关函数来进行异步调用.今天我们就来介绍下原生 ...

  5. 浅谈JavaScript中的继承

    引言 在JavaScript中,实现继承的主要方式是通过原型链技术.这一篇文章我们就通过介绍JavaScript中实现继承的几种方式来慢慢领会JavaScript中继承实现的点点滴滴. 原型链介绍 原 ...

  6. 浅谈JavaScript中的内存管理

    一门语言的内存存储方式是我们学习他必须要了解的,接下来让我浅谈一下自己对他的认识. 首先说,JavaScript中的变量包含两种两种类型: 1)值类型或基本类型:undefined.null.numb ...

  7. 浅谈 JavaScript 中 Array 类型的方法使用

    前言:Array 类型是 JavaScript 中除了 Object 类型以外最常用的类型. 一.创建数组 JavaScript 中的数组与其他语言中的数组有着很大的区别.例如Java.PHP等语言中 ...

  8. 【总结】浅谈JavaScript中的接口

    一.什么是接口 接口是面向对象JavaScript程序员的工具箱中最有用的工具之一.在设计模式中提出的可重用的面向对象设计的原则之一就是“针对接口编程而不是实现编程”,即我们所说的面向接口编程,这个概 ...

  9. 通过一道笔试题浅谈javascript中的promise对象

    因为前几天做了一个promise对象捕获错误的面试题目,所以这几天又重温了一下promise对象.现在借这道题来分享下一些很基础的知识点. 下面是一个面试题目,三个promise对象捕获错误的例子,返 ...

随机推荐

  1. ASP.NET MVC Forms验证机制

    ASP.NET MVC 3 使用Forms身份验证 身份验证流程 一.用户登录 1.验证表单:ModelState.IsValid 2.验证用户名和密码:通过查询数据库验证 3.如果用户名和密码正确, ...

  2. day 53 Django form 组件 autu 组件

    https://github.com/Endless-Clould/homework/tree/master/auto_zujian ---恢复内容开始--- 前情提要: Django 组件 的 fo ...

  3. Python小白学习之路(十七)—【内置函数二】

    序列操作类函数 all() 功能:判断可迭代对象的每个元素是否都为True值注意:If the iterable is empty, return True.(举例3) 回顾:None     ''  ...

  4. Linux下面安装swoole

    需要安装php7 新建一个文件夹,作为存储swoole的文件夹 然后执行下面相对应的命令,这里是我执行的命令 新建文件夹 mkdir swoole 切入到文件夹中,进行下载安装包 wget http: ...

  5. C++ 实现Biginteger

    网上C++版Biginteger参差不齐,一下子没有找到一个令人满意Biginteger,最近用c++改写了一下C#版 BigInteger,可以用于RSA大素数的生成,分享给大家.也请大家批评指正改 ...

  6. Spring Security构建Rest服务-0801-短信验证码发送

    实现短信验证码登录 开发短信验证码接口 校验短信验证码并登录 短信验证码和图片验证码开发思路类似: 1,我们访问一个controller 2,在controller里调用短信验证码生成接口生成验证码 ...

  7. 【jQuery源码】select方法

    /** * select方法是Sizzle选择器包的核心方法之一,其主要完成下列任务: * 1.调用tokenize方法完成对选择器的解析 * 2.对于没有初始集合(即seed没有赋值)且是单一块选择 ...

  8. mac 系统安装VM虚拟机打开时报错,提示不是虚拟磁盘的解决方式。

    最近刚买的苹果系统,不太会用,装了个虚拟机vmware fusion,好不容易把需要的软件装好,然后不知道是我操作了哪里,今天再次打开虚拟机的时候打不开了,报错提示找不到磁盘文件(虚拟磁盘-00000 ...

  9. j2ee高级开发技术课程第一周

    一.课程目标 这学期开始了J2EE高级开发技术这门课,在此之前我学习了javaSE,为这门课的学习打下了一定的基础.到这学期的结束我希望我能熟悉javaee,能开发企业级应用,对开发轻量级企业应用的主 ...

  10. 直接用php.exe命令还执行php程序跟直接在网页上访问php程序的区别

    1.直接使用php.exe命令执行php程序的格式: php test.php 2.因为没有经过apache或iis这种服务器,所以一些基于服务器的变量是不能使用的, 如$_SERVER,$_ENV等 ...