1.JavaScript严格区分大小写,如果弄错了大小写,程序将报错或者运行不正常。
2.JavaScript并不强制要求在每个语句的结尾加;
,浏览器中负责执行JavaScript代码的引擎会自动在每个语句的结尾补上;但某些情况下会出现语义不一致的问题,建议加;
3.
JavaScript不区分整数和浮点数,统一用Number表示,NaN---not a number,Infinity---无限
4.字符串是以单引号'或双引号"括起来的任意文本,比如'abc'
,"xyz"
等等,字符串中的'和"可以用转义字符\
来标识,ES6标准新增了一种多行字符串的表示方法,用反引号 ` ... ` 表示
5.建议使用===比较
==
比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;
===
比较,它不会自动转换数据类型,如果数据类型不一致,返回false
,如果一致,再比较。
6.NaN的比较
NaN === NaN; // false
ES6有个工具函数是Number.isNaN()
7.JavaScript的数组可以包括任意数据类型。
[1, 2, 3.14, 'Hello', null, true];
push()
向Array
的末尾添加若干元素,pop()
则把Array
的最后一个元素删除掉并返回该元素:
8.JavaScript的对象是一组由键-值组成的无序集合,JavaScript对象的键都是字符串类型,值可以是任意数据类型,JavaScript的对象是动态类型,你可以自由地给一个对象添加或删除属性:
object.id=18;//增加id的属性
delete object.age;//删除属性
9.使用var
申明的变量不是全局变量,它的范围被限制在该变量被申明的函数体内,在strict模式下运行的JavaScript代码,强制通过var
申明变量
'use strict';
10. JavaScript的函数也是一个对象,var abs=function (x){}
11.avaScript还有一个免费赠送的关键字arguments
,它只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数。
12.JavaScript函数允许接收任意个参数,rest参数只能写在最后,前面用...
标识,传入的参数先绑定a
、b
,多余的参数以数组形式交给变量rest
,所以,不再需要arguments
我们就获取了全部参数。
13.JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部,所以尽量把变量声明写在最前面。
14.JavaScript实际上只有一个全局作用域,全局变量会绑定到window
上,不同的JavaScript文件如果使用了相同的全局变量,或者定义了相同名字的顶层函数,都会造成命名冲突,减少冲突的一个方法是把自己的所有变量和函数全部绑定到一个全局变量中:
// 唯一的全局变量MYAPP:
var MYAPP = {};
// 其他变量:
MYAPP.name = 'myapp';
MYAPP.version = 1.0;
// 其他函数:
MYAPP.foo = function () {
return 'foo';
};
许多著名的JavaScript库都是这么干的:jQuery,YUI,underscore等等。
15. ES6引入了新的关键字let
,用let
替代var
可以申明一个块级作用域的变量,const申明一个常量,也是块级作用域
16.解构赋值
var person = {
name: '小明',
age: 20,
gender: 'male',
passport: 'G-12345678',
school: 'No.4 middle school'
};
// 把passport属性赋值给变量id:
let {name, passport:id} = person;
name; // '小明'
id; // 'G-12345678'
17. map()
方法定义在JavaScript的Array
中,我们调用Array
的map()
方法,传入我们自己的函数,就得到了一个新的Array
作为结果
'use strict'; function pow(x) { return x * x; } var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; var results = arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81] console.log(results);
18.ES6标准新增了一种新的函数:Arrow Function(箭头函数)
箭头函数相当于匿名函数,并且简化了函数定义。箭头函数有两种格式,一种像上面的x=>x*x,只包含一个表达式,连{ ... }
和return
都省略掉了。还有一种可以包含多条语句,这时候就不能省略{ ... }
和return,
如果参数不是一个,就需要用括号()
括起来:箭头函数内部的this
是词法作用域,由上下文确定。this
总是指向词法作用域,也就是外层调用者obj
// 两个参数:
(x, y) => x * x + y * y
// 无参数:
() => 3.14
// 可变参数:
(x, y, ...rest) => {
var i, sum = x + y;
for (i=0; i<rest.length; i++) {
sum += rest[i];
}
return sum;
}
19.JSON定死了字符集必须是UTF-8,表示多语言就没有问题了。为了统一解析,JSON的字符串规定必须用双引号""
,Object的键也必须用双引号""。
几乎所有编程语言都有解析JSON的库,而在JavaScript中,我们可以直接使用JSON,因为JavaScript内置了JSON的解析。
序列化:objectj转为JSON
var s = JSON.stringify(xiaoming);
反序列化:拿到一个JSON格式的字符串,我们直接用JSON.parse()
把它变成一个JavaScript对象:
var obj=JSON.parse('{"name":"小明","age":14}'); // Object {name: '小明', age: 14}