关于字符串
JavaScript引擎是先于Unicode编码诞生的,所以只能识别编号小于0xFFFF(十六个bit,也就是2个字节)的Unicode字符,所以JS在识别Unic ode时存在bug
关于Base64
Base64是一种基于64个可打印字符来表示二进制数据的表示方法
JS中调用全局函数btoa()可以将字符串转换为Base64编码,当然反过来atob()可以将Base64编码转换为原来的编码
btoa("jianshu.com") // "amlhbnNodS5jb20="
atob("amlhbnNodS5jb20=") // "jianshu.com"
如果需要将中文等非ASCII码字符转为Base64编码,需要插入一个转码的环节
btoa(encodeURIComponent('简书')) // "JUU3JUFFJTgwJUU0JUI5JUE2"
decodeURI(atob("JUU3JUFFJTgwJUU0JUI5JUE2")) // "简书"
关于对象(object)
简单来说,对象就是一组键值对(key-value)的集合,是一种无序的复合数据集合,对象的键名必须时字符串
下列方式均可以创建对象:
var o1 ={};
var o2 = new Object();
var o3 = Object.create(Object.prototype);
<注意>
{age : 123} 不是一个对象,只是一个代码块
var obj{
'3+3':'A'
'6' :'B'
}
请问obj[3+3]的值是什么?//'B'
因为3+3是一个未定义的变量,会被解析为6,然后会被转换为字符串'6',最后返回'B'
var name = 'x';
var obj = {
name : 'jianshu'
}
请问obj[name]返回什么? //undefined
没有引号,name就是一个变量,即name === 'x',所以obj[name] === obj['x'],但是没有'x'这个键值对,所以返回undefined
我想知道变量a是否已经被声明过(值为undefined不代表没有声明过),应该用什么代码?
if('a' in window){...} //如果一个变量被声明了。就会变成window的一个键值对
我想知道一个对象有哪些key,应该用什么API?
Object.keys(对象名)
关于for-in循环
for-in循环用来遍历对象,
for-in循环会跳过不可遍历的对象
for-in循环不仅遍历对象自身的属性,还会遍历继承的属性
for-in循环的遍历是无序的