资讯专栏INFORMATION COLUMN

【JavaScript】数据类型

ashe / 1922人阅读

摘要:数值转换有个函数可以把非数值转换为数值和转型函数可以用于任何数据类型,后面两个是专门用于把字符串转换为数值。类型类型用于表示由零或多个位字符组成的字符序列,即字符串。

2.4 数据类型

ECMAScript中有5种简单数据类型(基本数据类型):Undefined、Null、Boolean、Number和String。还有1种复杂数据类型--Object,Object本质上是由一组无序的名值对组成的。

2.4.1 typeof操作符

typeof操作符用来检测给定变量的数据类型,可能的返回值:

"undefined" 这个值未定义
"boolean" 这个值是布尔值
"string" 这个值是字符串
"number" 这个值是数值
"object" 这个值是对象或null
"function" 这个值是函数
例子:

var name = "tg";
console.log(typeof name);  // "string"
console.log(typeof (name));  // "string"
console.log(typeof {}); // "object"

typeof是一个操作符,后面的圆括号可有可无。

2.4.2 Undefined类型

Undefined类型只有一个值,即特殊的undefined。

如果在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。

var name;
console.log(name == undefined);  // true 

对于未声明过的变量,只能执行一项操作,即使用typeof操作符检测其数据类型(对未声明的变量调用delete不会导致错误(在非严格模式下))

2.4.3 Null类型

Null类型也是只有一个值的数据类型,这个特殊值就是null。null值可以看作是一个空对象指针。

console.log(typeof null);  // "object"

undefined其实是派生自null值:

console.log(null == undefined);  // true
2.4.4 Boolean类型

Boolean类型有两个字面值:true和false,两个值是区分大小写的。

要将一个值转换为其对应的Boolean值,可使用转型函数Boolean():

var name = "tg";
console.log(Boolean(name);  // true

可以对任何类型的值调用Boolean函数,而且总会返回一个Boolean值(true或false)

转换规则:

对于true或false,返回原值(true或false)

对于String类型的值,任何非空字符串返回true,空字符串("")返回false

对于Number类型的值,任何非零数字值(包括无穷大),返回true;0和NaN返回false

对于Object类型的值,任何对象返回true,null返回false

对于Undefined类型,undefined返回false(只有一个值)

2.4.5 Number类型

最基本的数值字面量格式是十进制整数。

var num = 15;

八进制(以8为基数) 以0开头,后面是(0~7)

var num = 070;  // 八进制的56

十六进制(以16为基数) 以0x开头,后面是(0~9及A~F),字母A~F可以大小写。

var num = 0xA;  //十六进制的10

注意:在进行算术计算时,所有以八进制和十六进制表示的数值都会被转换成是十进制。

1.浮点数值

浮点数值指包含一个小数点,并且小数点后面必须至少有一个数字。

var floatNum = 1.1;

保存浮点数值需要的内存空间是保存整数值的两倍。

对于那些极大或极小的数值,我们可以使用科学计数法(e表示法)来表示浮点数值。

e表示法表示的数值等于e前面的数值乘以10的指数次幂:

var floatNum = 3.125e7;  // 31250000
var floatNum1 = 3e-7;  //0.0000003

默认情况下,ECMAScript会将那些小数点后面带有6个零以上的浮点数值转换为以e表示的数值。

var floatNum1 = 3e-7;  //0.0000003

浮点数的最高精度是17位小数。

0.1 + 0.2 = 0.3000000000000004; // 不是等于0.3

2.数值范围

基于内存的限制,ECMAScript只能保存有限的数值。
ECMAScript能够表示的最小数值保存在Number.MIN_VALUE(最小值)中,这个值是5e-324;能够表示的最大数值保存在Number.MAX_VALUE(最大值)中,这个值是1.7976931348623157e+308.

如果某次计算的结果得到了一个超出JavaScript数值范围的值,那么这个数值就会被转换成特殊的Infinity值;如果这个值是负数,则会被转换为-Infinity(负无穷),如果这个数值是整数,则会转换成Infinity(正无穷)。

注意:Infinity是不能参与计算的数值。

用isFinite()来判断这个值是否无穷,该函数接受一个参数。如果参数位于最小与最大数值之间,返回true。

console.log(isFinite(1));  //true
console.log(isFinite(Infinity));  // false

3.NaN

NaN(Not a Number)表示非数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况。

注意点:

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

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

 console.log(NaN == NaN);  //false

我们可以用isNaN()函数来判断是否非数值,该函数接受一个参数,可以是任何类型。

console.log(isNaN(NaN));  // true

isNaN()在接收到一个值(可以是任何类型)之后,会尝试将这个值转换为数值,某些不是数值的值会直接转换为数值,比如:字符串"10"或Boolean值。而任何不能被转换为数值的值都会导致这个函数返回true。

console.log(isNaN(NaN));  // true
console.log(isNaN(10));  // false
console.log(isNaN("blue"));  //  true

4.数值转换

有3个函数可以把非数值转换为数值:Number()、parseInt()和parseFloat()

转型函数Number()可以用于任何数据类型,后面两个是专门用于把字符串转换为数值。

Number()函数的转换规则:

如果是Boolean值,true和false将分别转换为1和0

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

如果是null值,返回0

如果是undefined,返回NaN

如果是字符串中只包含数字(包括前面带正负号),则将其转换为十进制数值(前导的零会被忽略)

如果字符串中包含有效的浮点格式,如1.1,则将其转换为对应的浮点数值

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

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

如果字符串中包含上述格式以外的字符,返回NaN

如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回字符串值

console.log(Number("tg"));   // NaN
console.log(Number(""));   // 0
console.log(Number("0011"));  // 11
console.log(Number(true));   //1

一元加操作符的操作与Number函数规则相同。

parseInt()

parseInt()会忽略字符串前面的空格,直到找到第一个非空格字符。如果第一个字符不是数字字符或负号,就会返回NaN。如果第一个字符是数字字符,就会继续解析,直到解析完所有后续字符或者遇到了一个非数字字符。

parseInt()也能识别八进制(在ECMAScript 5中无法识别,将开头的0当作0)和十六进制,最后会转换成十进制。

console.log(parseInt("123tg"));  // 123
console.log(parseInt(""));   // NaN
console.log(parseInt("070"));  // 70
console.log(parseInt("0xf"));  //15
console.log(parseInt(22.5));  // 22

我们还可以为parseInt()提供第二个参数,指定需要转换的进制。

console.log(parseInt("0xAF",16));  // 175
console.log(parseInt("AF",16));  // 175
console.log(parseInt("AF"));  // NaN
console.log(parseInt("070",8));  // 56
console.log(parseInt("70",8));  // 56

如果提供了第二个参数,要转换八进制和十六进制时,可省略0和0x。

parseFloat()和parseInt()类似,也是从第一个字符(位置0)开始解析每个字符,而且一直解析到字符串末尾,或者解析到遇到一个无效的浮点数字字符为止,换句话说,字符串中的第一个小数点是有效的,后面的小数点是无效的,它还会忽略前导的零,只会解析十进制值。

console.log(parseFloat("123tg"));  // 123
console.log(parseFloat("22.12.4"));   // 22.12
console.log(parseFloat("070"));  // 70
console.log(parseFloat("0xf"));  //0
console.log(parseFloat(22.5));  // 22.5

2.4.6 String类型

String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由双引号或单引号表示。

var name = "tg";

用双引号表示的字符串和用单引号表示的字符串完全相同,但要确保引号前后一致,也就是说以双引号开头的必须以双引号结尾,以单引号开头的必须以单引号结尾。

1.字符字面量

String数据类型包含了一些特殊的字符字面量,也叫转义序列。

  换号
	   制表
  空格

  回车
f  进纸
  斜杠
"  单引号
"  双引号
xnn  以十六进制代码nn表示的一个字符(n为0~F),比如:x41表示"A"
unnn  以十六进制代码nnnn表示的一个Unicode字符(n为0~F)。比如:u03a3表示Σ

这些字符字面量可以出现在字符串中的任意位置,会被当做一个字符来解析。

var name = "tgu03a3";
console.log(name);  //tgΣ
console.log(name.length);  // 3

任何字符串的长度都可以访问其length属性取得。

2.字符串的特点

ECMAScript中的字符串是不可变的。一旦创建,值就不会改变。

后台逻辑:要改变某个变量保存的字符串,首先要销毁原来的字符串,然后用另一个包含新值的字符串填充该变量。

3.转换为字符串

要将一个值转换为字符串有两种方式:

使用每个值(null和undefined除外)都有的toString()方法

var age = 1;
console.log(age.toString());  // "1"

我们还可以给toString()传入一个参数,输出数值的基数。

var num = 10;
console.log(num.toString());  // "10"
console.log(num.toString(2)); // 1010
console.log(num.toString(8));  // 12

可以使用转型函数String(),能将任何类型的值转换为字符串,转换规则:

如果值有toString()方法,则调用该方法并返回相应的结果
如果值是null,则返回null
如果值是undefined,则返回undefined

console.log(String(10));  // "10"
console.log(String(true));  // "true"
console.log(String(null));  // "null"
console.log(String(undefined));  // "undefined"

要把某个值转为字符串,还可以使用加号操作符:

console.log( true + "");  // "true"

2.4.7 Object类型

ECMAScript中的对象其实就是一组数据和功能的集合。

对象可通过执行new操作符后跟创建的对象类型的名称来创建。

var o = new Object();

如果不传参,可以省略后面的圆括号(不推荐)。

var o = new Object;

在ECMAScript中,Object类型是所有对象的基础。

Object的每个实例都具有下列属性和方法:

Constructor:保存着用于创建当前对象的函数,比如上面的例子,构造函数就是Object()

hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中是否存在(而不是在实例的原型中),参数必须是字符串形式

isPrototypeOf(object):用于检查传入的对象是否是另一个对象的原型

propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举,参数必须是字符串形式

toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应

toString():返回对象的字符串表

valueOf():返回对象的字符串、数值或布尔值表示,通常和toString()返回的值相同

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

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

相关文章

  • JavaScript入门

    摘要:被识别为结束符。变量时被认为时有名字的容器。常量一旦被声明初始化,值并不能被改变。字符串可以看成右字符组成的数组,可能被误认为可变的。表达式没有显示的返回任何内容。 Java script 简介 Javascript 是一门跨平台,面向对象的轻量级脚本语言,运行于Javascript解释权/引擎 avascript内置了一个包含一系列对象的标准库,比如数组,日期,数字和一个语言元素合...

    AaronYuan 评论0 收藏0
  • WebSocket系列之JavaScript中数字数据如何转换为二进制数据

    摘要:以和为例,说明中的数字数据如何转换为二进制数据。对象用来表示通用的固定长度的原始二进制数据缓冲区。中的数字数据如何转换为二进制数据对和有了一个大概的了解,下面让我们来看下它是如何进行二进制数据操作的。 概述 本文主要通过对JavaScript中数字数据与二进制数据之间的转换,让读者能够了解在JavaScript中如何对数字类型(包括但不限于Number类型)进行处理。 二进制数据在日常...

    MASAILA 评论0 收藏0
  • JavaScript学习第一天笔记(变量、常量、数据类型

    摘要:变量与常量变量定义变量是存储数据信息的容器。中,变量是弱类型,也被称为松散类型。三类型布尔类型只有两个值均为小写如果大写活着大小写混合,识别为另一个变量名称。 JavaScript简介 JavaScript是一门跨平台、面向对象的轻量级脚本语言,运行于JavaScript解释器或者引擎中。JavaScript中,包括三个主要的部分1.核心语法内容(ECMAScript)2.文档对象模型...

    tinysun1234 评论0 收藏0
  • JavaScript-数据类型

    摘要:解释一行,执行一行这也意味着你可以使用同一个变量保存不同类型的数据二数据类型最新的标准定义了种数据类型种原型数据类型布尔值,和一个表明值的特殊关键字。我们称这些类型的值为原始值四布尔值布尔值数据类型只能有两个值,它们是文本和。 一、动态类型 JavaScript 是一种弱类型或者说动态语言。这意味着你不用提前声明变量的类型,在程序运行过程中,类型会被自动确定。(解释一行,执行一行)这也...

    沈俭 评论0 收藏0
  • JavaScript的语言特性以及重要版本

    摘要:通常一个完成的不仅仅包含了还包括了以及相关版本该版本在中使用。基于原型函数先行的语言使用基于原型的的继承机制,函数是的第一等公民其他相关的语言特性编译型语言把做好的源程序全部编译成二进制代码的可运行程序。 转载请注明出处,创作不易,更多文章请戳 https://github.com/ZhengMaste... 前言:JavaScript诞生于1995年,它是一门脚本语言,起初的目...

    Yangder 评论0 收藏0
  • JavaScript数据类型数据结构

    摘要:字符串类型的字符串类型用于表示文本数据。例如,使用一个分隔符,一个可以模仿一个列表一个的数组可能更适合一些。不幸的是,当一个分隔符在用于列表中的元素时,打乱了这个列表。属性的值可以是任意类型,包括具有复杂数据结构的对象。 编程语言都具有内建的数据结构,但各种编程语言的数据结构常有不同之处。本文试图列出 JavaScript 语言中内建的数据结构及其属性,它们可以用来构建其他的数据结构;...

    fireflow 评论0 收藏0

发表评论

0条评论

ashe

|高级讲师

TA的文章

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