JavaScript
为什么起名叫JavaScript?原因是当时Java语言非常红火,所以网景公司希望借Java的名气来推广,但事实上JavaScript除了语法上有点像Java,其他部分基本上没啥关系。
JavaScript语言是在10天时间内设计出来的,虽然语言的设计者水平非常NB,但谁也架不住“时间紧,任务重”,所以,JavaScript有很多设计缺陷
快速入门
JavaScript严格区分大小写,如果弄错了大小写,程序将报错或者运行不正常。
数据类型和变量
JavaScript不区分整数和浮点数,统一用Number表示。
比较运算符
第一种是==
比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;
第二种是===
比较,它不会自动转换数据类型,如果数据类型不一致,返回false
,如果一致,再比较。
由于JavaScript这个设计缺陷,不要使用==
比较,始终坚持使用===
比较。
这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言,Java是静态语言。
1 |
|
alert()
console.log()
字符串
多行字符串:反引号``
模板字符串
1 |
|
数组
JavaScript的Array
可以包含任意数据类型,并通过索引来访问每个元素。
1 |
|
indexOf
slice: 对应String的substring()
push和pop: pop()
则把Array
的最后一个元素删除掉
unshift和shift: 如果要往Array
的头部添加若干元素,使用unshift()
方法,shift()
方法则把Array
的第一个元素删掉
sort
reverse
splice
splice()
方法是修改Array
的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素:
1 |
|
concat: 拼接Array
join:把当前Array
的每个元素都用指定的字符串连接起来,然后返回连接后的字符串
1 |
|
对象
JavaScript的对象是动态类型,可以自由地给一个对象添加或删除属性
检测xiaoming
是否拥有某一属性,可以用in
操作符
1 |
|
循环
for ... in
对Array
的循环得到的是String
而不是Number
。
1 |
|
Map和Set
1 |
|
iterable
遍历Array
可以采用下标循环,遍历Map
和Set
就无法使用下标。为了统一集合类型,ES6标准引入了新的iterable
类型,Array
、Map
和Set
都属于iterable
类型。
1 |
|
函数
借助抽象,我们才能不关心底层的具体计算过程,而直接在更高的层次上思考问题。
函数定义和调用
function abs(x){}
等价于var abs = function(x){};
arguments
它只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数。
JavaScript引擎有一个在行末自动添加分号;的机制
变量作用域与解构赋值
全局作用域
不在任何函数内定义的变量就具有全局作用域。实际上,JavaScript默认有一个全局对象window
,全局作用域的变量被绑定到window
的一个属性。如window.alert()
名字空间
全局变量会绑定到window
上,不同的JavaScript文件如果使用了相同的全局变量,或者定义了相同名字的顶层函数,都会造成命名冲突,并且很难被发现。
减少冲突的一个方法是把自己的所有变量和函数全部绑定到一个全局变量中。如:
1 |
|
解构赋值:直接对多个变量同时赋值
let [x, [y, z]] = ['hello', ['JavaScript', 'ES6']];
方法
在一个对象中绑定函数,称为这个对象的方法。
高阶函数
JavaScript的函数其实都指向某个变量。既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
1 |
|
map/reduce
map是对数组的每个元素分别计算。
Array的reduce()
把一个函数作用在这个Array
的[x1, x2, x3...]
上,这个函数必须接收两个参数,reduce()
把结果继续和序列的下一个元素做累积计算。
1 |
|
filter
1 |
|
sort
Array
every()
方法可以判断数组的所有元素是否满足测试条件。
find()
方法用于查找符合条件的第一个元素,如果找到了,返回这个元素,否则,返回undefined
findIndex()
返回符合条件的第一个元素的索引
forEach()
和map()
类似,它也把每个元素依次作用于传入的函数,但不会返回新的数组。forEach()
常用于遍历数组,因此,传入的函数不需要返回值。arr.forEach(console.log);
闭包
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!