从今天开始用从新认识JS,毕竟前端是靠JS吃饭的,开始深挖一下细节,在这个过程当中也反思了一下,为啥java没学好。果真是基础不牢,地动山摇啊,古人诚不欺我也!前端
之前一直说会JS,却连这个问题没好好搞过,给本身两耳光……java
数据类型 | 名称 |
---|---|
1. 基本数据类型(也叫简单数据类型) | number string boolean symbol undefined null |
2. 复杂数据类型 | object |
+
链接符,优雅易懂。可是还能够这么写var longStr = 'agggggg\ bgggggg\ cgggggg\ d'
//结果依然是aggggggbggggggcggggggd
复制代码
上述代码不报错的前提是\
后面不能有除了换行符之外的任何字符,即便一个空格就报错 数组
java的8个基本数据类型:byte short int long float double char boolean java里面的判断长度的方法只有三个bash
因为JavaScript引擎(严格说是ES5规格)不能自动识别辅助平面(编号大于0xFFFF)的Unicode字符,致使全部字符串处理函数遇到这类字符,都会产生错误的结果(详见《标准库》一章的String对象章节)。若是要完成字符串相关操做,就必须判断字符是否落在0xD800到0xDFFF这个区间。 替换(String.prototype.replace)、截取子字符串(String.prototype.substring, String.prototype.slice)等其余字符串操做,都必须作相似的处理。ide
代码以下函数
function getSymbols(string) {
var length = string.length;
var index = -1;
var output = [];
var character;
var charCode;
while (++index < length) {
character = string.charAt(index);
charCode = character.charCodeAt(0);
if (charCode >= 0xD800 && charCode <= 0xDBFF) {
output.push(character + string.charAt(++index));
} else {
output.push(character);
}
}
return output;
}
var symbols = getSymbols('𝌆');
symbols.forEach(function(symbol) {
// ...
});
复制代码
Base64是一种基于64个可打印字符来表示二进制数据的表示方法。因为2的6次方等于64,因此每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应于4个Base64单元,即3个字节可表示4个可打印字符。它可用来做为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不一样的系统中而不一样。ui
两个方法 btoa():字符串或二进制值转为Base64编码 atob():Base64编码转为原来的编码编码
var string = 'Hello World!';
btoa(string) // "SGVsbG8gV29ybGQh"
atob('SGVsbG8gV29ybGQh') // "Hello World!"
复制代码
这两个方法不适合非ASCII码的字符,会报错。spa
btoa('你好')
VM1195:1 Uncaught DOMException: Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.
at <anonymous>:1:1
复制代码
要将非ASCII码字符转为Base64编码,必须中间插入一个转码环节,再使用这两个方法prototype
function b64Encode(str) {
return btoa(encodeURIComponent(str));
}
function b64Decode(str) {
return decodeURIComponent(atob(str));
}
b64Encode('你好') // "JUU0JUJEJUEwJUU1JUE1JUJE"
b64Decode('JUU0JUJEJUEwJUU1JUE1JUJE') // "你好"
复制代码
两个角度来看待 | 缘由 |
---|---|
1. 语法规范 | 变量没有值,就是undefined。事实上,你在console上随便写一个语句,都是undefined |
2. 习惯上理解 | 若是有一个对象,你声明了,可是此时不给他赋值,让他等于null;若是你有一个非对象的变量,你此时不想赋值,就让他等于undefined。 |
var obj = null,别人一眼就能看出你是想声明一个对象,不过此时不想赋值;var a = undefinded,别人一眼就能看出你是想声明一个非对象,此时不想赋值
var obj = {
'name': 'wushao',
'age': 8}
for (var key in obj){
console.log(obj.key)
}
复制代码
你是想打印出'wushao'和8来,结果屁都没有。
var obj = {
' ': 'frank'
没问题
}
复制代码
var person = {
'09a': '我不符合标识符规范,key必须加引号保护,不然就报错',
name: '我符合标识符规范,引号加不加均可以,反正key必定是个字符串'
}
复制代码
-还有啊,对象的每一个key-value的结束,必定记得加逗号啊!!!!,能多写不能少写,最新的ES6能够都写逗号,不报错
总之,记住一个公式
obj.name 等同于 obj.['name']
if ('a' in window) {
// 变量 a 声明过
} else {
// 变量 a 未声明
}
复制代码