美文网首页
JS 里的数据类型

JS 里的数据类型

作者: 达摩先森 | 来源:发表于2019-04-08 19:42 被阅读0次

JS中值可以分为七个类型,分别是数值(number)字符串(string)布尔值(boolean)nullundefined对象(object)symbol(ES6新增)。

其中,数值、字符串、布尔值、undefined、null被称为基本数据类型,对象被称为复杂数据类型,即基本类型的集合,对象包括array和function。

数值(number)

JavaScript 内部,所有数字都是以64位浮点数形式储存。根据国际标准,JavaScript 浮点数的64个二进制位,从最左边开始,是这样组成的。

  • 第1位:符号位,0表示正数,1表示负数
  • 第2位到第12位(共11位):指数部分
  • 第13位到第64位(共52位):小数部分(即有效数字)

符号位决定了一个数的正负,指数部分决定了数值的大小,小数部分决定了数值的精度。

JavaScript 能表示的范围为2^1024到2^-1023,如果超过最大范围就会发生“正向溢出”,那么, JavaScript 无法表示这么大的数就会返回Infinity(无穷),如果小于最小范围,则会返回0。

数值的表示法

科学计数法允许字母e或E的后面,跟着一个整数,表示这个数值的指数部分。比如1.23e2表示123;

数值的进制

JavaScript 对整数提供四种进制的表示方法:十进制、十六进制、八进制、二进制。

  • 十进制:没有前导0的数值。
  • 八进制:有前缀0o或0O的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。
  • 十六进制:有前缀0x或0X的数值。
  • 二进制:有前缀0b或0B的数值。

默认情况下,JavaScript 内部会自动将八进制、十六进制、二进制转为十进制。

特殊数值

  1. 正负0,基本相同,只有在表示符号位时,和当做分母时的返回值不一样。

  2. NaN,表示非数字,主要出现在将字符串解析成数字出错的场合,数据类型依然属于number,不等于任何值,包括自身,和任何数的运算得到的都是NaN。

  3. Infinity,表示无穷,用来表示两种场景:一正值太大,或负值太小;二非0除以0,得到Infinity。有正负之分,用来计算时,Infinity和正常非零数值进行加减乘除运算时,结果都是无穷,0乘以Infinity,返回NaN;0除以Infinity,返回0;Infinity除以0,返回Infinity;Infinity和自身做加乘运算返回自身,做减除运算返回NaN;和null计算时,null会被转成0来计算;和undefined计算,返回的都是NaN。

数值相关全局方法

  1. parseInt():用于将字符串转为整数。转换方式是从第一个字符开始一个个转换,遇到不能转换成数字的字符就停下,只返回已经转好的部分,如果第一个就不能转换,返回NaN。头部有空格时会自动去除空格再转换,如果参数不是字符串,会先转成字符砖再转换。第二位参数可选,默认十进制,如果超出进制能表示的内容就只转能转的部分并返回。

  2. parseFloat():用于将字符串转换为浮点数。转换规则也是一个一个转换,碰到不能转换的就停下,如果第一个字符就不能转返回NaN,且会将空字符串转为NaN。

  3. isNaN():用来判断一个值是否为NaN。但是,isNaN只对数值有效,如果传入其他值,会被先转成数值。因此,使用isNaN之前,最好判断一下数据类型。

  4. isFinite():该方法返回一个布尔值,表示某个值是否为正常的数值。

字符串(string)

字符串就是零个或多个排在一起的字符,放在单引号或双引号之中。单引号字符串的内部,可以使用双引号。双引号字符串的内部,可以使用单引号。如果要在单引号字符串的内部,使用单引号,就必须在内部的单引号前面加上反斜杠,用来转义。双引号字符串内部使用双引号,也是如此。

字符串默认只能写在一行内,分成多行将会报错。如果长字符串必须分成多行,可以在每一行的尾部使用反斜杠。连接运算符(+)可以连接多个单行字符串,将长字符串拆成多行书写,输出的时候也是单行。

转义

反斜杠(\)在字符串内有特殊含义,用来表示一些特殊字符,所以又称为转义符。
需要用反斜杠转义的特殊字符,主要有下面这些。

  • \0 :null(\u0000)
  • \b :后退键(\u0008)
  • \f :换页符(\u000C)
  • \n :换行符(\u000A)
  • \r :回车键(\u000D)
  • \t :制表符(\u0009)
  • \v :垂直制表符(\u000B)
  • ' :单引号(\u0027)
  • " :双引号(\u0022)
  • \ :反斜杠(\u005C)

字符集

JavaScript 使用 Unicode 字符集。JavaScript 引擎内部,所有字符都用 Unicode 表示。

JavaScript 不仅以 Unicode 储存字符,还允许直接在程序中使用 Unicode 码点表示字符,即将字符写成\uxxxx的形式,其中xxxx代表该字符的 Unicode 码点。比如,\u00A9代表版权符号。

解析代码的时候,JavaScript 会自动识别一个字符是字面形式表示,还是 Unicode 形式表示。输出给用户的时候,所有字符都会转成字面形式。

Base64 转码

所谓 Base64 就是一种编码方法,可以将任意值转成 0~9、A~Z、a-z、+和/这64个字符组成的可打印字符。使用它的主要目的,不是为了加密,而是为了不出现特殊字符,简化程序的处理。

JavaScript 原生提供两个 Base64 相关的方法。

  • btoa():任意值转为 Base64 编码
  • atob():Base64 编码转为原来的值

布尔值(boolean)

布尔值代表“真”和“假”两个状态。“真”用关键字true表示,“假”用关键字false表示。布尔值只有这两个值。

如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为false,其他值都视为true。

  • undefined
  • null
  • false
  • 0
  • NaN
  • ""或''(空字符串)

null 和 undefined

null与undefined都可以表示“没有”,含义非常相似。在用法上有区别:一般使用undefined来表示一个空的非对象,用null来表示一个空的对象。

对象(object)

对象(object)是 JavaScript 语言的核心概念,也是最重要的数据类型。

什么是对象?简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。

键名

对象的所有键名都是字符串(ES6 又引入了 Symbol 值也可以作为键名),所以加不加引号都可以。如果键名是数值,会被自动转为字符串。

属性的操作

  1. 属性的读取

读取对象的属性,有两种方法,一种是使用点运算符,还有一种是使用方括号运算符。

var obj = {
  p: 'Hello World'
};

obj.p // "Hello World"
obj['p'] // "Hello World"
  1. 属性的赋值

点运算符和方括号运算符,不仅可以用来读取值,还可以用来赋值。

var obj = {};

obj.foo = 'Hello';
obj['bar'] = 'World';

JavaScript 允许属性的“后绑定”,也就是说,你可以在任意时刻新增属性,没必要在定义对象的时候,就定义好属性。

  1. 属性的查看

查看一个对象本身的所有属性,可以使用Object.keys方法。

var obj = {
  key1: 1,
  key2: 2
};

Object.keys(obj);
// ['key1', 'key2']
  1. 属性的删除

delete命令用于删除对象的属性,删除成功后返回true。

var obj = { p: 1 };
Object.keys(obj) // ["p"]

delete obj.p // true
obj.p // undefined
Object.keys(obj) // []

注意,删除一个不存在的属性,delete不报错,而且返回true。

var obj = {};
delete obj.p // true
  1. in 运算符

in运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值),如果包含就返回true,否则返回false。它的左边是一个字符串,表示属性名,右边是一个对象。

var obj = { p: 1 };
'p' in obj // true
'toString' in obj // true

in运算符的一个问题是,它不能识别哪些属性是对象自身的,哪些属性是继承的。要想判断是否为对象自身的属性,可以使用对象的hasOwnProperty方法。

var obj = {};
if ('toString' in obj) {
  console.log(obj.hasOwnProperty('toString')) // false
}
  1. for...in 循环

for...in循环用来遍历一个对象的全部属性。

var obj = {a: 1, b: 2, c: 3};

for (var i in obj) {
  console.log('键名:', i);
  console.log('键值:', obj[i]);
}
// 键名: a
// 键值: 1
// 键名: b
// 键值: 2
// 键名: c
// 键值: 3

for...in循环有两个使用注意点。

  • 它遍历的是对象所有可遍历(enumerable)的属性,会跳过不可遍历的属性。
  • 它不仅遍历对象自身的属性,还遍历继承的属性。

with 语句

with语句的格式如下:

with (对象) {
  语句;
}

它的作用是操作同一个对象的多个属性时,提供一些书写的方便。

注意,如果with区块内部有变量的赋值操作,必须是当前对象已经存在的属性,否则会创造一个当前作用域的全局变量。

with语句的一个很大的弊病,就是绑定对象不明确。

typeof方法

typeof可以返回一个值的数据类型,除了null会返回object,函数会返回function外,其他几种都会返回自身的数据类型。

相关文章

  • JS 里的数据类型

    JS 里的数据类型 JS中有七种数据类型,分别是:number,string,boolean,undefined,...

  • JS 里的数据类型转换

    JS 里的数据类型转换 Js中的数据类型一共有7种,即number,string,boolean,underfin...

  • 《JS里的数据类型》

    JS里的数据类型分为 原始数据类型(primitive type) 和 合成数据类型(complex type)...

  • JavaScript数据类型

    JS 里的数据类型 七种数据类型 Number,String,Boolean,Null,Undefined,Sym...

  • JS的类型转换

    JS的数据类型: 首先, JS的数据类型分为基本数据类型和引用数据类型基本数据类型: string number ...

  • JS里的数据类型转换

    上一篇文章(JS里的数据类型)介绍了js中的数据类型。这篇主要介绍数据类型转换。 一、任意类型转字符串 转换成st...

  • JS 里的数据类型转换

    前言:上一篇博客讲到JS里的数据类型,相信大家已经了解到7种数据类型,那么这章将详细深入了解JS的不同数据类型之间...

  • JS里的数据类型转换及小技巧

    前言:之前的博客JS里的数据类型介绍了JS中的各种数据类型,那么可不可以把其他的数据类型转换成特定的一种数据类型呢...

  • JS 里的数据类型

    JS里的数据类型包含七种数据类型:number string boolean symbol undefined n...

  • JS 里的数据类型

    JS 里的数据类型 JavaScript 的数据类型,有7种。 1,数值(number)2,字符串(string)...

网友评论

      本文标题:JS 里的数据类型

      本文链接:https://www.haomeiwen.com/subject/kcjpiqtx.html