JS 里的数据类型

JavaScript中的每一个数据,都有它的类型。JS中一共有7种数据类型(包括ES6新增的symbol)。每一种数据类型所对应的数据分别是:

  1. number:整数跟小数(如11.23)。
  2. string:文本(如hello world)。
  3. boolean:表示两个状态,真(true)与假(false)。
  4. null:表示空值,及此处的值为空。
  5. undefinde:表示未定义或不存在。
  6. object:对象属于复杂数据类型。可以细分为:
    --狭义的对象(object
    --数组(array
    --函数(function
  7. symbol:表示独一无二的值。

number

JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。容易造成混淆的是,某些运算只有整数才能完成,此时 JavaScript 会自动把64位浮点数,转成32位整数,然后再进行运算。
一个数在JS内部的保存形式为:
(-1)^符号位 * 1.xx...xx(小数部分) * 2^指数部分
第1位:

  • 0表示正数,1表示负数

第2-12位:

  • 指数部分。指数部分共11位,意味着指数部分的最大值是2047。分出一半表示负数,JavaScript 能够表示的数值范围为2的1024次方到2的-1023次方(开区间)。

第13-64位:

  • 小数部分(有效数字)。其中1不保存在JS之中,所以JS的有效数字长度位53位。这意味着,绝对值小于2的53次方的整数,都可以精确表示。

string

字符串就是零个或多个排在一起的字符,放在单引号或双引号之中。

  • 在字符串中是用单引号,可以使用\转义字符
  • 将字符串分为多行书写,直接换行会报错。可以使用
    1 在行末加\
    2 使用+连接多个字符串
  • JavaScript 使用 Unicode 字符集。JavaScript 引擎内部,所有字符都用 Unicode 表示。
  • 每个字符在 JavaScript 内部都是以16位(即2个字节)的 UTF-16 格式储存。但JavaScript 对 UTF-16 的支持是不完整的,对于码点在U+10000到U+10FFFF之间的字符,JavaScript 总是认为它们是两个字符(length属性为2)。

boolean

boolean表示真与假两个状态,真用true表示,假用false表示。
除了以下了六个falsy值的boolean值是false以外,其余的值在JS中都被视为true。
-null
-undefined
-NaN //(Not a Number)
-0
-''"" //空字符串,需要注意空数组[]或空对象{}是true
-false

null和undefined

nullundefined都可以表示“没有”,含义非常相似。在实际使用中也几乎没有区别。

null表示空值,即该处的值现在为空。调用函数时,某个参数未设置任何值,这时就可以传入null,表示该参数为空。比如,某个函数接受引擎抛出的错误作为参数,如果运行过程中未出错,那么这个参数就会传入null,表示未发生错误。undefined表示“未定义”。

  • 在if语句中nullundefined都会转换成false
  • null转化为数字时,会变成0;undefined转为数字时,会变成NaN

object

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

1. 狭义的对象

  • 对象的所有键名都是字符串,加不加引号都可以。如果不加引号,则键名必须符合标识符的规范。
  • 对象的每一个键名又称为“属性”(property),它的“键值”可以是任何数据类型。如果一个属性的值为函数,通常把这个属性称为“方法”
  • 如果遇到如下这种情况,无法确定是对象还是代码块,一律解释为代码块。
{ foo: 123 }
{ console.log(123) } // 123  JS认为第一行是代码库
//如果需要解释位对象,可以加上圆括号
({ foo: 123 }) 
({ console.log(123) }) // 报错  JS认为第一行是对象
  • 读取与赋值对象的属性,有两种方法,一种是使用点运算符,还有一种是使用方括号运算符。
  • 如果使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理。数值键名只能使用方括号运算符。
  • 查看一个对象本身的所有属性,可以使用Object.keys方法。
  • delete命令用于删除对象的属性,删除成功后返回true。注意,即使删除的属性不存在,也会返回true。只有当属性 存在但不能删除时才会返回false

2. 数组

数组(array)是按次序排列的一组值。每个值的位置都有编号(从0开始),整个数组用方括号表示。

  • length属性的值就是等于最大的数字键加1。不是数字的键值对对length没有影响。
  • for...in不仅会遍历数组所有的数字键,还会遍历非数字键。

3. 函数

函数是一段可以反复调用的代码块。函数还能接受输入的参数,不同的参数会返回不同的值。typeof会返回function.

  • JavaScript 有三种声明函数的方法。
    1 function 命令
function print(s) {
  console.log(s);
}

2 函数表达式

var print = function(s) {
  console.log(s);
};
//此时S作为函数名只能在函数内部使用
//结尾要加;

3 Function 构造函数

var add = new Function(
  'x',
  'y',
  'return x + y'
);

// 等同于
function add(x, y) {
  return x + y;
}
// 最后一个参数才会被当作函数体,前面的都是参数。只有一个参数,该参数就是函数体。
  • 如果同一个函数被多次声明,后面的声明就会覆盖前面的声明。
  • JavaScript 语言将函数看作一种值,与其它值(数值、字符串、布尔值等等)地位相同。由于函数与其他数据类型地位平等,所以在 JavaScript 语言中又称函数为第一等公民。
  • 函数执行时所在的作用域,是定义时的作用域,而不是调用时所在的作用域。
  • 没有办法只省略靠前的参数,而保留靠后的参数。如果一定要省略靠前的参数,只有显式传入undefined。
  • 如果有同名的参数,则取最后出现的那个值。
  • 在有多个参数的情况下,如果要获得第一个参数的值,可以使用arguments对象。arguments[0]就是第一个参数,arguments[1]就是第二个参数,以此类推。
  • 闭包就是函数,即能够读取其他函数内部变量的函数。
  • 闭包的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量始终保持在内存中,即闭包可以使得它诞生环境一直存在。
  • JavaScript 引擎规定,如果function关键字出现在行首,一律解释成语句。如果要立即调用匿名函数,应该加上圆括号:
// 语句
function f() {}

// 表达式
var f = function f() {}
---------------------------------

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

推荐阅读更多精彩内容

  • 目录 概述typeof运算符number(数字)string(字符串)boolean(布尔)undefined &...
    阿小经阅读 777评论 0 7
  • 数值(number):整数和小数(比如1和3.14)字符串(string):文本(比如Hello World)。布...
    一只小前端阅读 1,928评论 0 0
  • 简介 JavaScript 语言的每一个值,都属于某一种数据类型。JavaScript 的数据类型,共有七种。 n...
    sxfshdf阅读 878评论 0 48
  • JavaScript 语言的每一个值,都属于某一种数据类型。JavaScript 的数据类型,共有六种。(ES6 ...
    Yixi_Li阅读 383评论 0 0
  • 衣服堆满衣柜,蔬菜填满冰箱,书籍挤满书柜,我们可曾认真想过:我们真的需要那么多吗?对拥有的我们认真对待过吗?我们拥...
    柔性人生阅读 414评论 0 1