前端规范

本文深入探讨JavaScript中Undefined与Void的区别与应用,解析变量初始化状态及void运算符的特性。同时,文章揭示了字符串长度限制背后的编码历史,以及Unicode字符处理的常见陷阱和ES6的改进。

用 void 0 代替 undefined。任何变量在赋值前是 Undefined 类型、值为 undefined。undefined 是一个变量,而并非是一个关键字。null 是 JavaScript 关键字。undefined,表示JavaScript不识别它。

我们一般不会把变量赋值为 undefined。void该运算符指定要计算一个表达式但是不论该表达式原来是否有自己的返回值,其返回值都为undefined。void运算符的操作数可以是任意类型。

 

 

 

 

var声明一个变量和直接window.变量名还是有区别的

var声明的,虽然属于window,但是不直接作用在window上,能赋值也可以解释了

 

 

String 有最大长度是 2^53 - 1,最大长度,并不完全是你理解中的字符数。而是字符串的 UTF16 编码,受字符串的编码长度影响的。

1990 UCS-2 诞生
1995.5 JavaScript 诞生
1996.7 UTF-16 诞生

也就是说,Brendan Eich 在写 JS 的时候,UTF-16 还没问世,所以只能用 UCS-2 的方式来处理字符,也因此留下了隐患。

JS 认为每 16 位 (2 字节)即表示一个字符

坑 1——length 属性

>"💩".length
>2

坑 2——反转字符串

  1. ES6 的 Array.from 支持代理对的解析

> Array.from('😃')
< ["😃"]

坑 3——码点与字符互转

>> String.fromCodePoint(0x1F4A9)

'💩' // U+1F4A9

>> '💩'.codePointAt(0)

0x1F4A9

坑 4——正则匹配

正则匹配符. 只能匹配单个 “字符”,但 js 将代理对当成两个单独的 “字符” 处理,所以匹配不到任何辅助平面字符。

从上面的例子中可以看出,ES6 已经在很努力地填坑了。对于 Unicode 字符,ES6 支持新的表示方法
\u{1F4A9} 加上花括号后,可以把码点直接填进去来表示,而不用去计算代理对。再补充 2 点:
1. 为了向后兼容,字符串的 length 属性还是用双字节判断的,所以要用 Array.from(str).length。
2. 遍历字符串的时候,可以用 for(let s of str) {}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值