• 0

  • 464

JS7大数据类型与变量声明

云哥

关注云计算

3星期前

查找一个字符对应的16进制编码的网站

JS七种数据类型(4基础2空1对象)

  • number
  • string
  • bool
  • symbol(没人用)
  • undefined
  • null // 以上是6种简单类型

  • object // 复杂类型

类型转换的几种方式

String('1') // 以下数字转字符串
1+'' 
(1).toString() // 1.toString()不行
Number('123') // 以下字符串转数字
'123'-0
+'123'
parseInt('123')
Boolean(1) // 以下是转换为bool
!!1 // true
复制代码

数组 函数 日期都属于object类型

如何理解NaN

  • NaN 无法表示的数字 但NaN依旧是数字
  • 0/0 => NaN
  • 当人们没有发明负数的时候1-5=NaN,但现在知道了是-4
  • NaN === NaN ===> false // 两个不知道是什么数字的数字怎么会相当呢?

八进制 十六进制 二进制写法

数字与字符串

  • 所有数字不论你是整数还是小数都是以64位浮点数形式存储的
  • 字符串能表示电话号码,数字不能表示电话号码,如果有多个0打头,以数字方式储存的话,显然就会丢失
  • 字符串是以类似UTF8形式存储的

进制的英文表示法

  • BIN:binary,二进制的
  • OCT:octal,八进制的
  • HEX:hexadecimal,十六进制的
  • DEC:decimal,十进制的

JS如何存数字的

十进制=>二进制

计算器最快速计算进制转换

如图,计算十进制的31=>二进制

如图,计算十六进制数3C5A=>二进制

JS如何存字符的

基础知识

  • 2位二进制数可表示 2^2=4 个数
    • 7位2进制数可表示 2^7=128 个数
  • 每8个二进制位组成了一个字节(Byte)
  • 计算机最小存储单位是字节

ASCII码

此处可查标准ASCII 标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)即0-127这128个数表示键盘上的所有符号

之后的所有编码的前128位都是从此而来

字符0是48号 A是65号

GB2312字符集

  • 国标2312是第一个汉字字符集
  • 每个汉字是HEX的形式,16位的二进制0/1,即两个字节,组成的
  • 整个国标2312最多可容纳2^16=65536个字符,(1位二进制0/1可容纳下2^1=2个字符)
  • 比如可以在这里查到“你”对应的GB2312是C4E3
  • 但是GB2312太早期,有许多生僻汉字没有存在里面

微软的GBK字符集

  • GBK国标扩完全兼容GB2312,将多国所用到的汉字拓展到2w+
  • 依旧是16位

Unicode万国码

  • Unicode是一种字符集,而UTF-8是一种编码规则
  • 定长至少3个字节
    • 比如: 这里可以查到'a'在unicode中是HEX的0061
    • 对应BIN是 00000000 00000000 01100001
    • 这便是定长的意思,即使是0也会占很多空位
    • 对于Unicode的字母来说,有效位也就两个字节
    • 这相对于GB2312而言,体积扩大百分之五十,导致unicode根本不会流行
  • 会不断扩充,以后会逐渐变成4个5个字节
  • Unicode 为世界上所有字符都分配了一个唯一的数字编号,每个字符都有一个唯一的 Unicode 编号,编号一般写成 16 进制,在前面加上 U+。例如:“马”的 Unicode 是U+9A6C
  • Unicode 就相当于一张表,建立了字符与编号之间的联系
  • Unicode 本身只规定了每个字符的数字编号是多少,并没有规定编号之间如何存储
  • 编号怎么对应到二进制表示呢?有多种方案:主要有 UTF-8,UTF-16,UTF-32

UTF-8

  • UTF-8 不是一种字符集的名称,它代表一种 Unicode 字符集的编码规则
  • UTF-8让Unicode码能够'变长'而不再定长,合理节省空间
  • UTF-8使用的字节数从 1 到 4 不等,存储一个字符的最小容量可以是1个字节即是8位,因此得名UTF-8

字符串

  • 引号不包含在字符串里面
  • 如果要在引号里面表示引号,应该用转义符号
    • "it's ok" ==> "it\'s ok"
    • \n\t\r长度是3
  • 推荐使用反引号``
  • 字符串是有属性的,不仅仅对象有属性
  • 空字符串的长度是0 空格字符串的长度是1

转义

"\n" // 换行
"\r" // 回车
"\t" // tab制表符
"\'" // "'"
"\u4f60" // "你" 可以用转义unicode方式输出字符串
复制代码

base64

window.btoa('123') // MTIz
window.atob('MTIz') // 123
复制代码

bool

falsy值是什么

  • 相当于是假但又不是false的值
  • null undefined 0 NaN '' 这五个是falsy值// 其中0和NaN是数字、
  • 由上得到1是真,'1' '0'都是真

整个js有多少值是false?**

答案:6个, false null undefined 0 NaN ''

undefined与null 两种空类型

  • 本质都是空,没有大的区别
  • undefined: var a; 但不赋值,则系统默认给undefined
  • undefined: function a(){ //此处没有return } 则系统默认在执行函数时返回undefined
  • undefined: 程序员习惯位为非对象的空值赋值undefined,仅仅是习惯
  • null: 程序员习惯位为对象的空值赋值null,仅仅是习惯

let const

  • 不准再写var
  • 相同: 会形成暂时性死区
  • 相同: 取消了var的声明提前现象
  • 相同: 在相同作用域中不可重复声明同一个变量名
  • 不同: 在声明变量时let可不立即完成赋值操作,const不行; 在声明一个变量后let可修改这个变量,const不行
    • 特例: const obj={age:11} ; obj.age=22; const遇上引用类型array和object时可修改
    • 如果你不希望引用类型被修改可以使用Object.freeze()

var的缺点/特点

  • var声明的变量存在变量提升,可以先使用后声明
    • 提前使用时值是undefined
  • var可以在相同的作用域内重复声明同一个变量,后来的值会覆盖之前的值。
    • 如果特别频繁在全局作用域中使用var,会造成全局污染。

块级作用域对var是不起效果的

// code1
var monkey='123';
{
  console.log(monkey);
  var monkey='456';
}
console.log(monkey); // 先输出123后输出456 因为block无法限制var
复制代码

暂时性死区

暂时性死区指的是块级作用域搭配let/const使用,let/const在块级作用域中声明了一个变量则他们会使块形成封闭的作用域,这个变量即使在外部作用域是存在的也不会产生关联。

// code2
var monkey='123';
{
console.log(monkey); // 对照code1,block将let声明的monkey锁死在里面,let不支持未声明就使用,因此报错
let monkey='456';
}
console.log(monkey);
复制代码

取消了声明提前

若在声明之前使用变量,就会报错,这就是取消了声明提前。在代码块内,使用 let const声明变量之前,该变量都是不可用的。

免责声明:文章版权归原作者所有,其内容与观点不代表Unitimes立场,亦不构成任何投资意见或建议。

云计算

464

相关文章推荐

未登录头像

暂无评论