JS数据类型

数字与字符串

功能不同:

  • 数字能加减乘 字符串只能加
  • 字符串表示手机号码,数字不行,0开头没有意义

存储方式不同

  • js中,数字是转成2进制即64位浮点数形式存
  • js中,字符串经过编码再转换成数字存储的

如何存数字

数字以0/1存,所以转二进制

  • 10转2:31=?*2……
  • 2转10:=2的n次方

16进制转2进制:1-9 A-F

  • 以8 4 2 1表示xxxx
  • 把二进制数对应四个四个一份,大于9转换成数字

Tips:也可用程序员计算器

如何存字符

  • 0~127表示所有字符:其中‘0’表示48,48-57表示数字符号,65表示A,97表示a
  • 【GB2312】:为汉字用,一个16进制数表示4位,4个就是16位,2个字节,包含2^16个字符
  • 【微软GBK】:生僻字、繁体字、韩文,国标扩,含2万多个,兼容GB2312,16位,后来国家发布新的国标库,但是不兼容GB2312未被广泛使用
  • 【万国码Unicode】:藏文、泰文,包含3万多个字符,字节大于2个,大于2^16,占硬盘
  • 【UTF-8】:开头1110表示这个字符3个8位,于是再读两个8位信息,开头各为10表示位数,然后合起来,前面补0,再读,开头为0说明只占8位,问开头的那个人比如餐厅
  • UTF-8 是 Unicode 一种存储规则,也叫字符编码规则

Tips:以8位起,英文一个字节,中文3个字节

js的数据类型

分类:四基二空一对象
不区分大小写

number、string、bool、symbol、underfined、null、obeject

注意:函数、数组、日期都是对象

number类型

整数、小数、科学计数法、十六进制0X或0x开头、八进制0或00或0o开头、二进制0b或0B开头
JS 的 number 全都是以小数(浮点数)的形式存储的,没有单独的整数
number特殊值

  • 0分3种:正负0,0,但是
2/0
Infinity
2/+0
Infinity
2/-0
-Infinity

  • 无穷大
    infinity,+infinity,-infinity
  • NaN是一个数字 表示不知道的数字,知识受限制;
    NaN !==NaN
    例如0/0 0?1?
    数学的历史:正数,0,负数,分数(有理数),无理数Π,虚数i^2=-1复数

64位浮点数

  • 小数点可以移动的数
  • 符号0表示正数,1表示负数,
  • 指数部分为2^11,由于含正负,所以减半,范围为-1023~1024;
  • 有效数字的首位都不是0,由于10进制首个可为1~9,二进制发现首位可为1,所以省掉第一个1

0.5怎么存

先转成二进制数,1*2-1得0.1,为2-1,所以存储为0 -1 0

0.625怎么存

转成二进制数,得0.101,转成科学计数法,所以存储为0 -1 01

64位浮点数的范围和精度

范围
最大:指数拉满2^1024,有效数字拉满(全为1),得最大二进制数

Number.MAX_VALUE
1.7976931348623157e+308

​ 最小:指数负的最大2^-1023,有效数字(全为1),得最小二进制数

Number.MIN_VALUE
5e-324

​ 精度:有效数字

  • 最多52+1个有效数字
  • 2^53有效数字是对应十进制数:9开头的15位数
  • 所以最大为十进制15-16位有效数字,约为53位的二进制有效数字
  • 16位的有效数字,小于90开头的可精确显示
  • 所以900000000000001的0不会显示

字符串string

2个字节
写法:单,双,反引号``
引号不属于字符串
转义\

'it\'s \"ok\"'
"it's "ok""

`it's "ok"`
"it's "ok""
单双引号交替使用,反引号万能
'1\n2'
"1
2"
'1\r2'
"1
2"
'1\t2'
"1	2"
'\uFFFF'
""
'\x31'
"1"

\n表示换行

\r表示回车

\t表示制表位

双\表单\

\uffff表示unicode字符

\xff表示256个Unicode字符 例如\x31表示1 10进制的49成31

多行字符串
里面回车

let s=`大家好
嘻嘻
哈哈`

字符串属性
对象才有属性的
字符串长度.length
空字符串和空格字符串不同,为0和1

'123'.length
3

'\n\r\t'.length
3

'\\\\\\'.length
3

''.length
0

' '.length
1

通过下标读取字符串 string[index]
index是0开始,length-1结束

let s='hello'
undefined
s[0]
"h"
s[5]
undefined

base64转码
编码btoa和反编码atob

window.btoa('1152827086@qq.com')
"MTQyOTQ4MzE1M0BxcS5jb20="
window.atob('MTQyOTQ4MzE1M0BxcS5jb20=')
"1152827086@qq.com"

bool的5个falsy值
if(value){…}else{…}
value为bool值还好,不是呢怎么判断真假
flasy值是相当于false,但不是false值
五个:underfined null 0 NaN ''空字符串 false
只有这几个false值,空字符串和空格字符串不是一个
underfined和null无本质区别
区别在于:

  • underfined是声明未赋值的变量的默认值
  • 函数返回值return未写时,默认return underfined
  • 习惯上,非对象为空写成underfined,对象是null

symbol符号

Symbol 生成一个全局唯一的值

变量声明三种

var a=1

let a=1 //变量声明

const a=1 //常量声明

a=1 //赋值,不是声明

function f1(){
    let a=1;
function f2(){
a=2;}
f2();}
undefined
f2()
VM236:1 Uncaught ReferenceError: f2 is not defined
    at <anonymous>:1:1

以后只能用let

let声明

  • 只作用于代码块,不超出{}
{
let a=1;
}
console.log(a);
  • 不能重复声明 在同一个作用域
let a=2;
{
let a=4;
}
//正确
  • 声明时可以赋值,可以不赋值
  • 先声明在使用
  • 全局声明的let,不会成为window的属性
    var会,例如window.abc
  • for循环配合奇效
for(let a=1;a<5;a++){
setTimeout(()=>{console.log(a)
},0)}
//返回1 2 3 4 
//var是显示4个5

const声明

  • 其他和let一样
  • 但不和for循环配合
  • 声明时要赋值,且不可更改

变量声明

  • 声明指定了值和类型
  • 后期可随意变化
  • 区别name和‘name’:

前者是变量,存在不知道什么区,值和类型可变
后者是常量字符串,存在堆中

类型转换

number=>string String()

123+’’ 空字符串

js Bug:String(1…20个0…)会转换成科学计数法"1e+22"

string=>number Number()

‘abc’-0

+‘abc’

preseInt(s)/preseFloat(s)

x=>bool
Boolean()

!!x //取原始布尔值,如!!1

!1
false
!!1
true

x=>string
x.toString()

true.toString()
"true"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值