浅谈 JavaScript 中常用数据及其类型转换
在 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 中常用数据及其类型转换的更多相关文章
- 浅谈JavaScript中的闭包
浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...
- 浅谈JavaScript中的null和undefined
浅谈JavaScript中的null和undefined null null是JavaScript中的关键字,表示一个特殊值,常用来描述"空值". 对null进行typeof类型运 ...
- 浅谈JavaScript中的正则表达式(适用初学者观看)
浅谈JavaScript中的正则表达式 1.什么是正则表达式(RegExp)? 官方定义: 正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去 ...
- 浅谈JavaScript中的Ajax
引言 作为一名WEB开发者,我想Ajax技术是一定需要掌握的.你也许平时没有使用JavaScript真正的写过Ajax.但是你一定使用过JQuery里面的相关函数来进行异步调用.今天我们就来介绍下原生 ...
- 浅谈JavaScript中的继承
引言 在JavaScript中,实现继承的主要方式是通过原型链技术.这一篇文章我们就通过介绍JavaScript中实现继承的几种方式来慢慢领会JavaScript中继承实现的点点滴滴. 原型链介绍 原 ...
- 浅谈JavaScript中的内存管理
一门语言的内存存储方式是我们学习他必须要了解的,接下来让我浅谈一下自己对他的认识. 首先说,JavaScript中的变量包含两种两种类型: 1)值类型或基本类型:undefined.null.numb ...
- 浅谈 JavaScript 中 Array 类型的方法使用
前言:Array 类型是 JavaScript 中除了 Object 类型以外最常用的类型. 一.创建数组 JavaScript 中的数组与其他语言中的数组有着很大的区别.例如Java.PHP等语言中 ...
- 【总结】浅谈JavaScript中的接口
一.什么是接口 接口是面向对象JavaScript程序员的工具箱中最有用的工具之一.在设计模式中提出的可重用的面向对象设计的原则之一就是“针对接口编程而不是实现编程”,即我们所说的面向接口编程,这个概 ...
- 通过一道笔试题浅谈javascript中的promise对象
因为前几天做了一个promise对象捕获错误的面试题目,所以这几天又重温了一下promise对象.现在借这道题来分享下一些很基础的知识点. 下面是一个面试题目,三个promise对象捕获错误的例子,返 ...
随机推荐
- iOS-WKWebview 带有进度条加载的ViewController【KVO监听Webview加载进度】
前言 为什么要说 WKWebview,在之前做电子书笔记时已经提过 WKWebview 在iOS8之后已完全替代 Webview,原因就不多说了,主要还是内存过大: 封装 封装一个基于 UIViewC ...
- P1484 种树
P1484 种树 题意: 在n个数中选出至多k个数,且两两不相邻,并使所选数的和最大. n<=500000 思路 先建一个堆,把所有点扔进去,当取出队首元素时累加到答案时,把它和它左右两个点一 ...
- thinkphp5动态生成二维码实例总结
thinkphp5关于动态生成二维码类库总结: 遇到的最大问题如下:我想大部分人也碰到过,所有觉得有必要总结下: thinkphp5提示找不到Qrcode类,可是自己明明都放置到了,vendor 目录 ...
- 【NOIP2017】 宝藏 状压dp
为啥我去年这么菜啊..... 我现在想了$20min$后打了$10min$就过了$qwq$. 我们用$f[i][j]$表示当前深度为$i$,访问了状态$j$中的所有点的最小代价. 显然$f[i][j] ...
- rabbitmq系列二 之工作队列
---恢复内容开始--- 1.工作队列的简介 在上一篇中,我们已经写了一个从已知队列中发送和获取消息的程序,在这里,我们创建一个工作队列(work queue), 会发送一些耗时的任务给多个工作者.模 ...
- C++ 定时器Timer在项目中的使用
目录 1.情况说明 2.空循环实现 3.定时器实现 1.情况说明 由于最近要在项目里做弹出弹幕,要求是弹出1秒后消失,一开始我使用空循环进行计时,发现执行到这段代码CPU占用率上升十几个百分点,后来改 ...
- Netty核心概念(6)之Handler
1.前言 本节介绍Netty中第三个重要的概念——Handler,这个在前两节都提到了,尤其是Channel和Handler联系紧密.handler本身的设计非常简单,但是所起到的作用却很大,Nett ...
- Android 开发工具类 30_sendXML
String xml = "<?xml version=\"1.0" encoding=\"UTF-8"?> <persons> ...
- SPSS学习系列之SPSS Modeler的帮助文档怎么调出来使用?
不多说,直接上干货! 欢迎大家,加入我的微信公众号:大数据躺过的坑 人工智能躺过的坑 同时,大家可以关注我的个人博客: http://www.cnblogs.com/z ...
- javascript快速入门1--JavaScript前世今生,HelloWorld与开发环境
JavaScript历史 大概在1992年,一家称作Nombas的公司开始开发一种叫做C--(C-minus-minus,简称Cmm)的嵌入式脚本语言. Cmm背后的理念很简单:一个足够强大可以替代宏 ...