JavaScript中的数据类型

栏目: JavaScript · 发布时间: 5年前

内容简介:看到这里,你是否已经对它们了如指掌呢。如果你还对它们之间的定义、转换、检测等方面并不是那么清楚,或者已经有些模糊。那么,下面就让我们一起去重新探索、温习一遍吧如果文章中有出现纰漏、错误之处,还请看到的小伙伴多多指教,先行谢过

ECMAScript 迄今为止标准定义了 7 种数据类型: 6 种原始类型-- StringNumberBooleanUndefinedNullSymbol1 种引用类型-- Object

看到这里,你是否已经对它们了如指掌呢。如果你还对它们之间的定义、转换、检测等方面并不是那么清楚,或者已经有些模糊。那么,下面就让我们一起去重新探索、温习一遍吧

如果文章中有出现纰漏、错误之处,还请看到的小伙伴多多指教,先行谢过

以下↓

原始值

Object 以外的所有类型都是不可变的(值本身无法被改变),我们称这些类型的值为 原始值

String类型

JavaScript 的字符串类型用于表示文本数据. JavaScript 字符串是不可更改的。这意味着字符串一旦被创建,就不能被修改。但是,可以基于对原始字符串的操作来创建新的字符串

var a = 'hello'
复制代码

类型转换:

  • toString()
var num = 2;
num.toString() // '2'
var found = true;
found.toString() // 'true'

复制代码

除去 nullundefined 之外,其余数据类型都存在 toString 方法,使用会报错

  • String()
var sym = Symbol(1);
String(sym) // 'Symbol'
var num = 10;
String(num)  // '10'
var str;
String(str) // 'undefined'
复制代码

如果值有 toString 方法,则调用该方法并返回响应的结果

如果是 null 返回 'null'

如果是 undefined 返回 'undefined'

  • 隐式转换
var a = 3;
a + ''  // '3'
var obj = {a: 3};

obj + '' // [object object]
复制代码

转换规则和 String 方法一致

Number类型

根据 ECMAScript 标准, JavaScript 中只有一种数字类型:基于 IEEE 754 标准的双精度 64 位二进制格式的值( -(263 -1)263 -1

特殊的数值类型:

无穷大: +Infinity()-Infinity()NaN (非数值, Not-a-Number )

NaN ,非数值。是一个特殊的 Number 类型,用来表示一个本来要返回数值的操作未返回数值的情况

  • 任何涉及 NaN 的操作都返回 NaN
  • NaN 与任何值都不相等,包括 NaN 本身
40 / NaN  // NaN
NaN === NaN // false
复制代码

最基本的数值字面量格式是十进制整数,还可以通过八进制或十六进制来表示。八进制字面值的第一位必须是 0 ,然后是八进制数字序列 (0 ~ 7) 。十六进制字面量的前两位必须是 0x ,后跟任何十六进制数字 (0 ~ 9 以及 a ~ f) 。其中字母可以是大写也可以是小写

var num1 = 070; // 八进制的56
var num1 = 079; // 无效的八进制,会解析为十进制的79
var num2 = 56; // 十进制的56
var num3 = 0x38; // 十六进制的56
复制代码

类型转化方式: Number()parseInt()parseFloat() 以及操作符隐式转换

Boolean类型

表示一个逻辑实体,可以有两个值: truefalse

var suc = true;
var los = false;
复制代码

类型转化方式: Boolean() 以及操作符隐式转换

Undefined类型

Undefined 类型只有一个值,即特殊的 undefined 。一个 声明但没有被赋值的变量会有个默认值 undefined

var a;  // undefined
复制代码

Null类型

Null 类型也只有一个值,即特殊的 null 表示一个空对象指针

var foo = null;
复制代码

Symbol类型

符号 (Symbols)ECMAScript6 版新定义的。符号类型是唯一的并且是不可修改的

var s = Symbol()
复制代码

Symbol 函数前不能使用 new 命令,否则会报错。这是因为生成的 Symbol 是一个原始类型的值,不是对象

Symbol 函数可以接受一个字符串作为参数,表示对 Symbol 实例的描述

引用类型

ECMAScript 中,引用类型是一种数据结构,用于将数据和功能组织在一起

最常见的引用类型:对象 (Object) 、数组 (Array) 、函数 (Function) 、正则 (RegExp) 和日期 (Date)

引用类型与基本类型之间最大的不同

基本数据类型的值是按值访问的,基本类型的值是不可变的

var a = 1;
var b = 1;

a === b  // true

b = a 
b = 2;

a // 1
复制代码

引用类型的值是按引用访问的,引用类型的值是可变的

var a = {};
var b = {};

a === b  // false

var a = {};
var b = a
b.name = 'hello'

a.name // hello
复制代码

基本包装类型

为了便于操作基本类型值, ECMAScript 还提供了 3 个特殊的引用类型: BooleanNumberString

var a = new String('hello')
typeof a // object 
复制代码

引用类型与基本包装类型的主要区别就是对象的生存期。使用 new 操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存当中。而自动创建的基本包装类型的对象,则只存在于一行代码的执行瞬间,然后立即销毁。这意味着我们不能在运行时给基本类型值添加属性和方法

var s1 = 'some text';
s1.color = 'red';
s1.color // undefined

// 但是这样是可以的

var s1 = new String('some text');
s1.color = 'red';
s1.color // red 
复制代码

不建议显式的创建基本包装类型的对象,因为在很多时候会造成一些让人很迷惑的东西

var b = new Boolean(false)
var c = b && true
c // true
复制代码

这样的情况下, b 这个变量就是 Boolean 对象,所以无论在什么情况下,它都是 true

记得之前看到过这样一个问题:

var str = 'hello'

typeof str // String

str instanceof String // false
复制代码

这里的结果为 false 的原因就是 str 本质上是一个原始值,并不存在 prototype 属性

当然,这里也涉及到了数据类型的判断,有兴趣的小伙伴可以点击这里 查看如何判断 JavaScript 中的数据类型


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Algorithms and Data Structures

Algorithms and Data Structures

Kurt Mehlhorn、Peter Sanders / Springer / 2008-08-06 / USD 49.95

Algorithms are at the heart of every nontrivial computer application, and algorithmics is a modern and active area of computer science. Every computer scientist and every professional programmer shoul......一起来看看 《Algorithms and Data Structures》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

SHA 加密
SHA 加密

SHA 加密工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具