JS数据类型与类型转换

JS数据类型与类型转换

1.数字与字符串

功能不同
  • 数字是数字,字符串是字符串,要严谨
  • 数字能加减乘除,字符串不行
  • 字符串能表示电话号码,数字不行
存储形式不同
  • JS中,数字是用64位浮点数的形式存储的
  • JS中,字符串是用类似UTF8形式存储的(UCS-2)

2.七种数据类型

  • 数字 number
  • 字符串 string
  • 布尔 boolean
  • 符号 symbol
  • 未定义 undefined
  • 空对象 null
  • 对象 object
  • 大数 bigint
  • 口诀 五基两空一对象
数组,函数,日期,等等都属于object

3.布尔值

真或假 true / false

下列运算将会得到布尔值
  • 否定运算 !value
  • 相等运算 1==2 , 1!=2, 3<4 , 3<=4

4.数字 number 64位浮点数

写法

  • 整数写法 1
  • 小数写法 0.1
  • 科学计数法 1.23e4
  • 八进制写法 0123或00123或0o123
  • 十六进制写法 0x3F 或 0X3F
  • 二进制写法 0b11 或 0B11
特殊值
  • 正0 和 负0 和 0 值都相等 只有在做分母时得到的值有区别
  • 无穷大 infinity , +infinity, -infinity
  • 无法表示的数字
    • NaN(Not a Number) NaN != NaN true
    • 属于number类型
JS数字存储形式
  • 浮点就是浮动的点,意思就是小数点会移动
  • 123.456可以表示为1.23456e10^2
  • 也可以表示为12345.6e10^-2
浮点数.png
  • 64位存储一个number
  • 符号占1位
  • 指数占11位(-1023~1024)
  • 有效数字占52位(开头的1省略)

5.大数bigint

JS在2020年新出的一种数字类型,来看MDN对于这个数据类型的描述

BigInt 是一种内置对象,它提供了一种方法来表示大于 253 - 1 的整数。这原本是 Javascript中可以用 Number 表示的最大数字。BigInt 可以表示任意大的整数。
//  使用方法
//  可以用在一个整数字面量后面加 n 的方式定义一个 BigInt ,如:10n,或者调用函数BigInt()。

const theBiggestInt = 9007199254740991n;

const alsoHuge = BigInt(9007199254740991);
// ↪ 9007199254740991n

const hugeString = BigInt("9007199254740991");
// ↪ 9007199254740991n

const hugeHex = BigInt("0x1fffffffffffff");
// ↪ 9007199254740991n

const hugeBin = BigInt("0b11111111111111111111111111111111111111111111111111111");
// ↪ 9007199254740991n

5.字符串string

每个字符两个字节( 阉割版UTF8 )

写法

  • 单引号 '你好'
  • 双引号 "你好"
  • 反引号`你好`
转义
  • \' 表示 '
  • \ " 表示"
  • \ n 表示换行
  • \ r 表示回车
  • \t 表示tab制表符
  • \ 表示 \
  • \uFFFF 表示对应的Unicode字符
  • \ xFF 表示前256个Unicode字符
字符串的属性
  • string.length 获取字符串的长度

  • string[index] 通过下边读取字符

    •   let s = "hello";
        s[5]  // undefined   不报错
      
  • window.btoa 正常字符串转为 Base64编码的字符串

6.布尔值的使用

if配合布尔值

if语句经常需要判断真假

  • if( value ){... } else { ...}
特殊情况
  • 五个相当于false的值
    • undefined null 0 NaN ''
  • JS中除了以上五个值还有false之外,其余值全是true

3.undefined 与 null

没有什么本质的区别

注意:

  • 如果一个变量声明了但没有赋值,那么默认值就是undefined
  • 如果一个函数,没有写return,那么默认return 的是 undefined
  • 习惯上把非对象的空值写为undefined,对象的空值为null

7.symbol 唯一值

第一个作用是作为属性名避免属性名冲突,
第二个作用是替代代码中多次使用的字符串(例如:abc),多次使用的字符串在代码中不易维护,而这时候定义一个对象的属性(属性名用Symbol格式),值为abc,就可以作为全局变量来使用了。
第三个作用,由于以Symbol值作为名称的属性,不会被常规方法遍历得到。我们可以利用这个特性,为对象定义一些非私有的、但又希望只用于内部的方法。
第四个作用,有时,我们希望重新使用同一个Symbol值,Symbol.for方法可以做到这一点。它接受一个字符串作为参数,然后搜索有没有以该参数作为名称的Symbol值。如果有,就返回这个Symbol值,否则就新建并返回一个以该字符串为名称的Symbol值。

var a1 = Symbol('a')
var a2 = Symbol('a')
a1 !== a2 // true  

可以给每个 Symbol 起一个名字,不过这个名字跟 Symbol 的值并没有关系,可以认为这个名字就是个注释。

8.变量声明

三种方式

  • var a = 1;
  • let a = 1;
  • const a = 1;
三者区别
  • var是过时的、不好用的方式
  • let是新的,更合理的方式
  • const是声明时必须赋值,且不能再改的方式
let声明

规则

  • 遵循块作用域,即使用范围不能超出{ }
  • 不能重复声明
  • 可以赋值,也可以不赋值
  • 必须先声明再使用,否则报错
  • 全局声明的let变量,不会变成 window下的属性
  • for配合let使用有奇效
const声明

规则

  • 跟let几乎一样
  • 只有一条不一样: 声明时就要赋值,赋值后不能改

9.类型转换

number => string
  • String(n)
  • n + ''
string => number
  • Number(s)

    •   var a = 10000000000000000000000;
        var b = Number(a);
        console.log(b); // 1e+22    数字过大会变成科学计数法
      
  • parseInt(s) / parseFloat(s)

  • s - 0 / +s

X = > bool
  • Boolean(X)
  • !!x 取原始布尔值
X => string
  • String(x)

  • x.toString()

    •   1.toString();// Uncaught SyntaxError: Invalid or unexpected token
        // JS会认为1.toString是小数,所以会报错
      
    •   (1).toString();   // "1"    加个括号就解决了
        1..toString();  // "1"   多加个点也能解决
      
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,527评论 6 544
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,687评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,640评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,957评论 1 318
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,682评论 6 413
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 56,011评论 1 329
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 44,009评论 3 449
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,183评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,714评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,435评论 3 359
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,665评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,148评论 5 365
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,838评论 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,251评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,588评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,379评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,627评论 2 380

推荐阅读更多精彩内容