首先明确一点,为什么要学习编程基础?
操作系统运行于 硬件 之上
浏览器运行于 操作系统 之上
html/css/JS运行于 浏览器 之上
html/css/JS和 数据 都来自于 服务器
硬件与软件:计算机的运行原理,推荐阅读 编码
学习编程基础可以把我们的知识面扩大,防止自己成为井底之蛙。
在计算机内部,只能存储存储与读取0和1,所有信息都是用二进制数串的形式表示的。
第一步:(内存)如何存储0和1?
- 存储/读取
1----高电平
0----低电平
第二步:如何存储数字
计算机所有信息都是以二进制数串的形式存储。因此数字1 2 3 4 5 6 7 8 9 0都是经转化为二进制存储在计算机内。
负数会以 补码 的形式存储。
小数会以 浮点数 的形式存储
第三步:如何存储字符
为每个字符编号,使用ASCII美国信息交换标准代码。
如果你想存储 a
,那么就存储 97
对应的二进制:a -> 0110 0001
第四步:如何存储中文
在ASCII美国信息交换标准代码中只有数字与字母的字符,并没有中文。因此,我们国家推出了GB2312中国国家标准简体中文字符集。
GB2312共收录 6763 个汉字,同时收录了包括拉丁字母,希腊字母,日文平假名及片假名字母,俄语西里尔字母在内的 682 个字符。
但在计算机的快速发展下,GB2312收录的字符已经不满足日常需要了,因此微软推出了 GBK 字符集
第五步:存储所有字符
Unicode 字符集 将全球字符编号都收录了,包括中日韩文字、藏文、盲文、楔形文字、 颜文字:-)
、 绘文字😂
2016年6月时,Unicode 总共有 128237 个字符。在存储这么多字符的情况下,因此Unicode 使用了 4 个字节(32位)来存储一个字符。
如此一来,电脑的负荷就变大了,为了选取一种高性价比的方式来存储数据,于是出现了 UTF-8
同一个字符
a
在普通unicode的方式下,它的转换如下:
a -> 00000000 00000000 00000000 011000012 = 006116
而经过UTF-8算法转化后:
a -> 01100001
总结:
- 计算机只能存储0 和1 ,其他所有信息都是以二进制数串的形式存储。
- 目前计算机字符集有 ASCII美国信息交换标准代码 、GB2312 、GBK 字符集 、Unicode。
- UTF-8 是一种编码方式,不是字符集!
- 字符集历史
- **历史问题 **
JavaScript 使用了 Unicode 字符集,但是没有使用 UTF-8 编码
JavaScript 用了 UCS-2 编码!
因为 1995 年 UTF-16 还没被发明出来, JavaScript 也不想使用 UTF-32。
具体看这里
后果
ES5 无法表示 \uFFFF 之后的字符(如 \u1D306),某些情况下会出 bug