前端升级打怪路:JS数据类型和运算符(十二)

380 阅读4分钟

数字与字符串

数字与字符串的区别

  • 数字是数字,字符串是字符串
  • 数字能加减乘除,字符串不能加减乘除
  • 数字不能表示电话号码,字符串能表示电话号码
  • 数字不可以以0开头,储存时会吧0给省略,导致数据流失
  • 字符串可以以0开头,数据不会流失
  • 数字与字符串存储形式不同
    • JS中,数字是用64位浮点数的形式存储的
    • JS中,字符串是用类似UTF8形式存储的

如何存数字

  • 十进制转二进制
  • 二进制转十进制

JS中的数据类型(重点记住)

  1. 数字 number
  2. 字符串 string
  3. 布尔bool
  4. 符号 symbol
  5. undefined
  6. null
  7. 对象 object
  8. 注意:以下不是数据类型数组,函数,日期 它们都属于object

数字number

写法

  • 整数写法 1
  • 小数写法 0.1
  • 科学计数法 1.23e4
  • 八进制写法0o123
  • 十六进制写法 0X3F
  • 二进制写法 0b11

特殊值

  • 有正0和负0之分 ,但是他们都等于0,要严格区分
  • 无穷大之分:nfinity、 +Infinity、- nfinity
  • 存在无法表示的数字 NaN (Not a Number) 以表示不能被表示的数,但他还是一个数

JS数字的存储形式

  • 以64位浮点数形式储存
    • 浮点就是浮动的点,意思就是小数点会乱动 * 123.456可以表示为1.23456e10^2,也可以表示为12345.610^-2 * 小数点可以随时变动

64位存储一个 number 符号占1位 指数占11位(-1023~1024) 有效数字占52位(开头的1省略)

范围和精度

  • 范围(忽略符号位)
    • 指数拉满、有效数字拉满,得到最大二进制数字
    • Number. MAX Value:1.7976931348623157e+308
    • 指数负方向拉满、有效数字最小1,得到最小值
    • Number. MIN VALUE. 5e-324
  • 精度(有效数字)
    • 最多只能到52 进制位表示有效数字
    • 2^53对应的十进制是9后面15个零
    • 所以15位有效数字都能精确表示
    • 16位有效数字如果小于90开头,也能精确表示
    • 9110000000000001就存不下来

字符串string

写法

  • 单引号:'你'
  • 双引号: "你好"
  • 反引号包裹:你好
  • 注意:引号不属于字符串的一部分,只是表示他是一个字符串
  • 如果要在单引号里面包含单引号怎么办?
    • 导致错误写法,例子: it's ok, JS引擎会认为it'就结束了,后面的JS就看不懂
    • 正确写法→转义: 'it'sok',"it'sok'

转义(记住)

  • 用另一种写法表示你想要的意思
    • \n表示换行
    • \r表示回车
    • \t表示tab制表符
    • \\表示\
    • \uFFF表示对应的Unicode字符
    • \xFF表示前256个Unicode字符
  • 例子:比如有多行字符串
    • 如果你想要在字符串里回车
      • 可以这样:let s = `
      • 用反引号很容易做到

字符串的属性

  • 注意:只有对象才有属性,那么字符串的有属性是什么?

字符串的长度

  • 可以用这种方式查看字符串的长度

通过下标读取字符

  • 通过这种方式读取处于不同位置的字符

base64转码(招聘简历邮箱)

  • window.btoa用来转码
  • window.atob用来解码

布尔boolean

  • 只有两个值truefalse,注意大小写
  • 下列运算符会得到bool值
    • 否定运算
      • !value
    • 相等运算
      • 1==2、1!=2、3==4、3!==4
    • 比较运算
      • 1>2、1≥2、3<4、3<4
  • ifbool
    • if语句常常需要判断真假
    • if (value) {...} else{...}

五个falsy值(重点记住)

  • falsy就是相当于false但又不是false

    • undefined
    • null
    • 0
    • NaN
    • ''
      • ''' '不是一个玩意,请保持严谨
  • undefinednull两种空类型,空空如也

    • 这是JS的原创之处
  • 细节一

  • 变量声明了,但没有赋值,那么默认值就是 undefined,而不是hut

  • 细节二

    • 如果一个函数,没有写 return,那么默认 return undefined,而不是null
  • 细节三

    • 前端程序员习惯上,把非对象的空值写为 undefined
    • 対象的空值写为nll

变量声明(三种声明方式)

var a = 1 
let a = 1 
const a = 1 
  • var是过时的、不好用的方式

    • var 变量提升
  • let是新的,更合理的方式

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

    • 重点:是声明时必须赋值,且不能再改的方式
    • 但是可以改里面的属性
  • name和'name'的区别别

    • name是变量
      • 值可变,可能是'name',也可能是" hello
    • name'是***字符串***常量
      • 常量就是不变量,'name'只能是'name',不能是其他值

类型转换

  • number => string
    • String(n)
    • n+''
  • string => number
    • Number(s)
    • parselnt(s)/parsefloat(s)
    • s-0
  • x=> bool
    • Boolean(x)
    • !!x
  • X=> string
    • String(x)
    • x.toString()