资讯专栏INFORMATION COLUMN

JavaScript回顾学习:数据类型

youkede / 439人阅读

摘要:本篇文章将回顾学习种基本类型和及数据类型之间的转化。如果不能,再调用对象的方法,再测试返回值是否可以被转化为数值。首先可以用于任何数据类型,另外两个则是专门用于把字符串转换成数值。

概述

ECMAScript中有5中基本数据类型:Undefined,Null,Boolean,Number,String,还有一种复杂数据类型对象(Object)Object本质上是由一组无序的名值对组成的,JavaScript同样还定义了另外两种特殊对象:

数组--->表示带编号的值的有序组合

函数--->函数是具有与它相关联的可执行代码的对象,通过调用函数来运行可执行代码,并返回运算结果

综上为ES5的全部数据类型,ES6新出了一种数据类型为Symbol,表示独一无二的值。
函数,数组,对象在后续文章中会有详解(写完后将加上链接,提前埋坑)。本篇文章将回顾学习5种基本类型和Symbol及数据类型之间的转化。

基本数据类型 undefined

Undefined类型只有一个值,即undefined,在使用var声明变量但没有对这个变量初始化时,这个变量的值就是undefined

注意:我们没有必要显式的将一个变量初始化为undefined。因为没有赋值初始化的变量就是undefined这样更有利于我们比较赋值还是未赋值的变量。

Null

Undefined类似,Null类型也只有一个值nullnull表示是一个空对象指针。所以当type of null的时候返回"object"

undefined不同的是,当我们明确这个变量是将用来保存对象的时候,我们最好将这个变量初始化为null,这样有利于我们只要检查当前这个对象的值是不是null就可以知道当前的变量是否已经保存了一个对象的引用。同时也能更好的区别undefinednull

Boolean 类型

Boolean类型只有两个值:truefalse 这个类型在开发中可以说是用的最多的类型了,大多数判断都是用这个类型来完成的。

注意: 所有的其他的类型都可以转化为Boolean类型。关于转化的情况下面会讲到。

Number类型

简而言之就是数字,分为整数和浮点数。最基本的整数数字值是十进制整数的也就是我们平时用的数字,除了十进制,还有八进制和十六进制。

八进制0开头的后面的每位数都是(0~7)如:

var num = 0666; // 八进制的438

但是如果不符合规则了,那前面的0就会被忽略,后面数值按照十进制解析,如:

var num1 = 0668; // 不符合规则 解析为668 

(严格模式八进制是无效的)

十六进制的前两位是0后面跟任何十六进制的数字(0~9及A~F)

在进行计算的时候八进制和十六进制的数值都会被转化为十进制数值。

浮点数,就是通俗理解的小数。由于舍入误差原因所以不要将浮点数作为判断依据。
数字可以用科学计数法e表示,如:

var int = 3e3; // 表示3000,相当于3乘以10的3次幂
var float = 3e-3 // 表示0.003 ,相当于3乘以10的-3次幂

数字在javascript中是有范围的:5e-324~1.7976931348623157e308;一般情况是用不到的知道就行,超过范围的数值会自动被转换为Infinity(区分正负)。如果出现了也可以用isFinite()函数进行识别判断,在范围内转换为true

关于数值最后还有一个特殊的值: NaN 代表非数值英文直译缩写(Not a Number);用于本来是要返回数值的操作没有返回数值就会返回NaNNaN有两个特点需要注意一下:

任何涉及NaN的操作都返回NaN

NaN与任何值都不相等,包括NaN本身。

因为以上两个比较难受的特点会导致我们没法判断一个值是不是NaN,所以JavaScript给我们定义了一个函数:isNaN()这个函数接受一个参数,如果能转化位数值返回false,不能则true,以下有几个书上非常经典的例子,请切记(面试可能会用到,哈哈哈哈哈):

isNaN(NaN)     // true
isNaN(10)      // false (10是一个数值)
isNaN("10")    // false ("10"可以被转化为数值10)
isNaN("blue")  // true  (不能被转化为数值)
isNaN(true)    // false (可以被转化为1)

手动注意一下这里 isNaN()的参数也可以是对象,当传入一个对象的时候会先调用被传入对象的valueOf()方法,然后确定该方法返回的数值是否可以被转化为数值。如果不能,再调用对象的toString()方法,再测试返回值是否可以被转化为数值。之所以特别注意这里因为一般JavaScript中的内置函数和操作符都是按照这个流程执行的。下面基于isNaN举个栗子:

var a = {};
isNaN(a);      // true 
//执行过程
a.valueOf()    // {},不能转化。
//然后执行
a.toString()   // 返回"[object Object]" 也不能被转化,所以isNaN返回true

说到number类型肯定要提一下3个函数:Number(),parseInt(),parseFloat().功能相似但也不是完全相同,一个一个来说。
首先Number()可以用于任何数据类型,另外两个则是专门用于把字符串转换成数值。
Number()函数的转换规则:

如果是Boolean值,truefalse将分别被转换为10

如果是数字值则是简单的传入和返回

如果是null,返回0

如果是undefined,返回NaN

如果是字符串,遵循以下规则:

如果字符串中只包含数字(包括前面带正负号),则转换为十进制数字(0开头会忽略0),浮点数转换为浮点数

如果字符串中包含有效的十六进制数,则转换为相同大小的十进制数

如果是空字符串,则返回0

如果字符串中包含除了上述之外的字符,则返回NaN

如果是对象,则调用valueOf()方法,按照上面的规则调用转换返回值,如果返回NaN,则继续调用toString()方法,再次按照上面的规则转换

举几个例子:

var num1 = Number("Hello world") // NaN
var num2 = Number("") // 0
var num3 = Number("0000000000020") // 20
var num4 = Number(true) // 1

再次手动注意一下 +操作符与Number()函数相同 ,如下例:

var str = "1212" 
+str // 1212

parseInt()只转换字符串,规则大体可以整理为一下几种:

它会忽略字符串前面的空格,如果第一个非空格字符串不是数字或者正负号就会返回NaN

空字符串返回NaNNumber()返回0

按顺序解析每一个字符直至遇到非数字字符或结尾

浮点数会转换为整数

可以添加第二个参数作为转换基数(即多少进制),如果不填第二个参数ES5之后无法解析8进制数会直接忽略前导0

若第二个参数为16可忽略前导0x

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/106081.html

相关文章

  • JavaScript 回顾学习:变量

    摘要:变量的分类全局变量可以在任何地方使用的变量局部变量在函数内声明的变量只在函数内有定义,作用域是局部性的什么时候使用当一个数据需要被反复使用时,就要先保存在变量中。 第一篇回顾学习,变量 什么是变量 变量就是在内存中刨一个坑存一个数据,再给这个坑起个名。为什么要给一个加引号呢,因为JavaScript是松散类型的,即一个变量可以用来保存任何类型的数据。变量的分类:全局变量:可以在任何地方...

    KitorinZero 评论0 收藏0
  • JavaScript回顾学习:目录篇

    摘要:前言之前说要重头开始复习,之前一直都在忙着找工作面试,现在工作也终于是找到了,虽然不那么尽人意,但总算有个归属,一段时间的适应也有了自己稳定的时间规划,为了给懒惰捉急的自己一个前行的动力,这一篇的回顾学习目录篇也就这样提上了日程。 前言 之前说要重头开始复习js,之前一直都在忙着找工作面试,现在工作也终于是找到了,虽然不那么尽人意,但总算有个归属,一段时间的适应也有了自己稳定的时间规划...

    luckyw 评论0 收藏0
  • 2017前端发展回顾

    摘要:前端开发在年依然持续火热,本文将对热点事件做一个总结。版的和协议在前端领域,一直独占鳌头。年又发布了一个重大的版本更新。主要是配合使用了服务工作线程。而且还提供了供前端开发者接入。快速发布了和在悄悄地跳过之后,在月号正式发布。 译者按: 老技术日趋成熟,新技术层出不穷。 原文: A recap of front-end development in 2017 译者: Fundebu...

    lmxdawn 评论0 收藏0
  • 前端每周清单第 43 期:2017 JavaScript 回顾、Rust 与 WebAssembly

    摘要:杨冀龙是安全焦点民间白帽黑客组织核心成员,被浪潮之巅评为中国新一代黑客领军人物之一他在本文中依次分享了对于黑客的定义如何从黑客成为一名安全创业者技术创业踩过的坑给技术创业者建议等内容。 showImg(https://segmentfault.com/img/remote/1460000012377230?w=1240&h=796); 前端每周清单专注前端领域内容,以对外文资料的搜集为...

    xorpay 评论0 收藏0
  • 关于JavaScript, NPM官方发布了2018年的回顾以及2019年的预测

    摘要:不过,根据伯克利大学的这篇文章来看,拥有丰富的开源库,是开发者在选择一门开发语言时,最重要的因素。拥有超过个可用的开源库,是目前世界上最大的开源库集合。月份,我们发布了。这和年的情况是相反的。在的调查中,超过的受访者表示他们正在使用。 showImg(https://segmentfault.com/img/bVblvke?w=693&h=300); 原文标题:This year in...

    dadong 评论0 收藏0

发表评论

0条评论

youkede

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<