JavaScript数据类型

1. 基本数据类型

1.1 Number 数值类型

在javascript中无论是整数还是小数都属于数值类型

1.2 String 字符串类型

在javascript中无论是用单引还是双引括起来的都是字符串类型

1.3 Boolean 布尔类型

在javascript中布尔类型比较特殊,只有 truefalse

1.4 Undefined 未定义类型

在javascript中未定义类型比较特殊,只有一个取值 undefined

1.5 Null 空类型

2. 复杂数据类型(也叫引用数据类型)

Object 对象类型是最复杂的数据类型,又可以分成三个子类型。

  • 对象(Object)
  • 数组(Array)
  • 函数(Function)

3. ES6新增一种数据类型(Symbol )

后期会单独整理ES6笔记,这里不过多记录

4. typeof 运算符

在javascript中为了方便我们检测某一种数据是属于哪一种数据类型的, javascript提供了一个名称叫做 typeof 的操作符(还有一种写法 typeof() ,自己随意选择)

var num;
num = 100;
// 利用typeof检测num这个常量是属于哪一种数据类型的, 并且将检测的结果保存到res1这个变量中
var res1 = typeof num
console.log(res1); // number

var res2 = typeof true
console.log(res2); // boolean

var res3 = typeof 'Hello'
console.log(res3); // string

var res4 = typeof undefined
console.log(res4); // undefined

// 由于没有给v这个变量进行初始化, 所以这个变量中保存的数据默认是undefined
var res5 = typeof v;
console.log(res5); // undefined

//null的类型是object,这是由于历史原因造成的。1995年的 JavaScript 语言第一版,只设计了五种数据类型(对象、整数、浮点数、字符串和布尔值),没考虑null,只把它当作object的一种特殊值。后来null独立出来,作为一种单独的数据类型,为了兼容以前的代码,typeof null返回object就没法改变了。
var res6 = typeof null
console.log(res6); // object

5. 数据类型转换

5.1 转换成字符串类型

如果想将四种基本数据类型转成字符串类型,通常有以下几种方法

  • String() 方法可以将任意类型的值转成字符串

    var res1 = typeof String(123)
    console.log(res1); // string
    
    var res2 = typeof String(null)
    console.log(res2); // string
    
    var res3 = typeof String(undefined)
    console.log(res3); // string
    
    var res4 = typeof String(true)
    console.log(res4); // string
    
  • 可以通过.toString()方法来转成字符串

    // toString()方法
    var val1 = 123;
    var res6 = val1.toString()
    console.log(typeof res6); // string
    
    var val2 = true;
    var res7 = val2.toString() 
    console.log(typeof res7); // string
    
    // 这里需要注意的是toString是Object对象内置的方法,null和undefined是没有的。
    var val3 = undefined;
    var res8 = val3.toString() 
    console.log(typeof res8); // 报错 Cannot read property 'toString' of null
    
    var val4 = null;
    var res8 = val4.toString() 
    console.log(typeof res8); //  报错 Cannot read property 'toString' of null
    
  • 通过 + 运算符也可以转成字符串(隐士类型转换)

    var num = 10;
    var str = "boy";
    // 这里的 + 是字符串的拼接 底层的本质其实就是调用String()函数
    var res5 = num + str;
    console.log(res5); // 10boy
    console.log(typeof res5); // string
    
5.2 转换成数值类型

如果想将四种基本数据类型转成字符串类型,通常有以下几种方法

  • 通过 Number() 方法来转换

    // 将String类型转换为数值类型
    // 如果字符串中都是数值, 那么就正常转换
    var str1 = "456";
    var res1 = Number(str1);
    console.log(res1); // 456
    console.log(typeof res1); // number
    
    // 如果是空字符串或者空格字符串,那么转换成0
    var str2 = "  ";
    var res2 = Number(str2);
    console.log(res2); // 0
    console.log(typeof res2); // number
    
    // 如果字符串不都是字符串,那么转换成NaN
    var str = "10boy";
    var res = Number(str);
    console.log(res); // NaN
    console.log(typeof res); // number
    
    // 将布尔类型转换为数值类型
    // 如果布尔类型为True那么就转换成1
    var result1 = Number(true)
    console.log(result1); // 1
    
    // 如果布尔类型为False那么就转换成0
    var result2 = Number(false)
    console.log(result2); // 0
    
    // 将null转换成数字
    var result3 = Number(null)
    console.log(result3); // 0
    
    // 将undefined转换成数字
    var result4 = Number(undefined)
    console.log(result4); // NaN
    

    NaN是 JavaScript 的特殊值,表示“非数字”(Not a Number),它的数据类型依然属于Number,使用typeof运算符可以看得很清楚。

    NaN不等于任何值,包括它本身。

  • 可以通过运算符的 + 号和 - 号来转换(隐士类型转换)

    // 虽然通过+/-都可以将其它类型转换为数值类型, 但是-会改变数值的正负性
    // +/-底层本质上就是调用了Number函数
    var num = +"456";
    console.log(num); // 456
    console.log(typeof num); // number
    
    var num1 = +"";
    console.log(num1); // 0
    console.log(typeof num1); // number
    
    var num2 = +"  ";
    console.log(num2); // 0
    console.log(typeof num2); // number
    
    var num3 = +"abc";
    console.log(num3); // NaN
    console.log(typeof num3); // number
    
    var flag1 = true;
    console.log(+flag1); // 1
    
    var flag2 = false;
    console.log(+flag2); // 0
    
    console.log(+null); // 0
    console.log(typeof +null); // number
    
    console.log(+undefined); // NaN
    console.log(typeof +undefined); // number
    
    var str1 = "123";
    var str2 = "456";
    var res1 = str2 - str1;
    var res2 = str1 + str2
    console.log(res1); // 333
    console.log(typeof res1); // number
    
  • 可以通过 parseInt()parseFloat() 方法来转换

    // 注意点: parseInt/parseFloat都会从左至右的提取数值, 一旦遇到非数值就会立即停止
    // 停止的时候如何还没有提取到数值, 那么就返回NaN
    var str = "123abc";
    var res = parseInt(str);
    console.log(res); // 123
    console.log(typeof res); // number
    
    var str1 = "add123abc";
    var res1 = parseInt(str1);
    console.log(res1); // NaN
    console.log(typeof res1); // number
    
    var str2 = "12.a314";
    // var res2 = parseInt(str2); // 12
    var res2 = parseFloat(str2); // 12
    console.log(res2); // 12
    console.log(typeof res2); // number
    
    var str3 = "13.14abc";
    var res3 = parseFloat(str3);
    console.log(res3); // 13.14
    console.log(typeof res3); // number
    
    // 注意点: parseInt/parseFloat都会将传入的数据当做字符串来处理
    var res4 = parseInt(true);
    console.log(res4); // NaN
    
    var res5 = parseInt(undefined);
    console.log(res5); // NaN
    
    var res6 = parseInt(null);
    console.log(res6); // NaN5.3 转换成布尔类型
    
5.3 转换成布尔类型

在JavaScript中如果想将基本数据类型转换为布尔类型, 那么只需要调用 Boolean() 方法

// 除了空字符串、0、null、undefined、NaN是false其余都是true
var str1 = 'abc'
var res1 = Boolean(str1);
console.log(res1); // true

var str2 = ''
var res2 = Boolean(str2);
console.log(res2); // false

var str3 = null
var res3 = Boolean(str3);
console.log(res3); // false

var str4 = undefined
var res4 = Boolean(str4);
console.log(res4); // false

var str5 = NaN
var res5 = Boolean(str5);
console.log(res5); // false

var str6 = 123
var res6 = Boolean(str6);
console.log(res6); // true

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

推荐阅读更多精彩内容