JavaScript基本数据类型

本文系总结作业,部分参考内容在这里

在 JavaScript 规范中,共定义了6+1,七种数据类型,分为6种原始类型和对象。接下来我们分类讨论一下。

6种原始类型

1. String

String 类型用于表示由零或多个 16 位 Unicode 字符组成的字符序列,即字符串

  • JavaScript的字符串类型用于表示文本数据。在字符串中的每个元素占据了字符串的位置。第一个元素的索引为0,下一个是索引1,依此类推。字符串的长度是它的元素的数量。
  • 在JavaScript中的字符串需要使用单引号或双引号括起来,表示该值是一个字符串。
  • 字符串不可更改,但可基于原始字符串操作创建新的字符串。常用操作方法有:
    • 字符操作:charAt,charCodeAt,fromCharCode
    • 字符串提取:substr,substring ,slice
    • 位置索引:indexOf ,lastIndexOf
    • 大小写转换:toLowerCase,toUpperCase
    • 模式匹配:match,search,replace,split
    • 其他操作:concat,trim,localeCompare

2. Number

数字类型。在JavaScript里,数字类型能够代表的范围是 -(2的63次方-1) ~ (2的63次方-1) 。

  • JavaScript 提供了几个特殊数值,用于判断数字的边界和其他特性 。如下所示:
    • Number.MAX_VALUE:JavaScript 中的最大值
    • Number.MIN_VALUE:JavaScript 中的最小值
    • Number.MAX_SAFE_INTEGER:最大安全整数,为 253-1
    • Number.MIN_SAFE_INTEGER:最小安全整数,为 -(253-1)
    • Number.POSITIVE_INFINITY:对应 Infinity,代表正无穷
    • Number.NEGATIVE_INFINITY:对应 -Infinity,代表负无穷
    • Number.EPSILON:是一个极小的值,用于检测计算结果是否在误差范围内
    • Number.NaN:表示非数字,NaN与任何值都不相等,包括NaN本身
    • Infinity:表示无穷大,分 正无穷 Infinity 和 负无穷 -Infinity
  • 有 3 个函数可以把非数值转换为数值,如下:
Number(value)
parseInt(string [, radix])
parseFloat(string)

Number() 可以用于任何数据类型,而另两个函数则专门用于把字符串转换成数值。

对于字符串而言,Number() 只能对字符串进行整体转换,而 parseInt() 和parseFloat() 可以对字符串进行部分转换,即只转换第一个无效字符之前的字符。

3. Boolean

布尔类型。Boolean 类型只有两个字面值:true 和 false 。 在 JavaScript 中,所有类型的值都可以转化为与 Boolean 等价的值 。转化规则如下:

  • 所有对象都被当作 true
  • 空字符串被当作 false
  • null 和 undefined 被当作 false
  • 数字 0 和 NaN 被当作 false

4. Undefined

一个没有被赋值的变量会有个默认值undefined。它的语义是,希望表示一个变量最原始的状态,而非人为操作的结果 。 这种原始状态会在以下 4 种场景中出现:

  • 声明了一个变量,但没有赋值
var foo;
console.log(foo); //undefined
  • 访问对象上不存在的属性
console.log(Object.foo); // undefined
var arr = [];
console.log(arr[0]); // undefined

访问 Object 对象上的 foo 属性,返回 undefined , 表示Object 上不存在或者没有定义名为 foo 的属性。数组中的元素在内部也属于对象属性,访问下标就等于访问这个属性,返回 undefined ,就表示数组中不存在这个元素。

  • 函数定义了形参,但没有传递实参
// 函数定义了形参 a
function fn(a) {
    console.log(a); //undefined
}
fn(); // 未传递实参

函数 fn 定义了形参 a, 但 fn 被调用时没有传递参数,因此,fn 运行时的参数 a 就是一个原始的、未被赋值的变量。

  • 使用 void 对表达式求值
void 0 ; // undefined
void false; // undefined
void []; // undefined
void null; // undefined
void function fn(){} ; // undefined

5. Null

只有一个值:null,表示空值。
null 是原始数据类型 Null 中的唯一一个值,但 typeof 会将 null 误判为 Object 类型 。

typeof null == 'object'

在 JavaScript 中,数据类型在底层都是以二进制形式表示的,二进制的前三位为 0 会被 typeof 判定为对象类型,如下:

  • 000 - 对象,数据是对象的应用
  • 1 - 整型,数据是31位带符号整数
  • 010 - 双精度类型,数据是双精度数字
  • 100 - 字符串,数据是字符串
  • 110 - 布尔类型,数据是布尔值

而 null 值的二进制表示全是 0 ,自然前三位当然也是 000,因此,typeof 会误以为是对象类型。如果想要知道 null 的真实数据类型,可以通过下面的方式来获取:

Object.prototype.toString.call(null) ; // [object Null]

6. Symbol

符号类型,唯一且不可修改。

Symbol 是 ES6 新增的一种原始数据类型 。在 ES6 之前,对象的属性名只能是字符串,这样会导致一个问题,当通过 mixin 模式为对象注入新属性的时候,就可能会和原来的属性名产生冲突 。而在 ES6 中,Symbol 类型也可以作为对象属性名,凡是属性名是 Symbol 类型的,就都是独一无二的,可以保证不会与其他属性名产生冲突。

Object类型

javascript 中对象(物体)的概念可以比照着现实生活中实实在在的物体来理解。一个对象可以是一个单独的拥有属性和类型的实体。

ECMA262 把对象定义为:无序属性的集合,其属性可以包含基本值、对象或者函数。

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

var o = new Object();

也可以直接创建一个对象。

var person = { name: 'Bob', age: 20, gender: 'male' };
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容