JavaScript总结
Contents
快速入门
数据类型
- number
不区分整数和浮点数,统一用number (NaN表示not a number,Infinity 表示无限大)
- 字符串
单引号或者双引号括起来的任意文本,如果有单引号和双引号可以用\来转义
1 | 模板字符串 |
1 | 操作字符串 |
- 布尔值
- null和undefined
null表示空,undefined表示未定义
- 数组
1 | [1, 2, 3.14, 'Hello', null,true] |
- 对象
键值对组成的无序集合
1 | var person= |
要获取对象的属性,用对象变量.属性名
1 | person.name //'wkn' |
1 | 用in判断一个属性是否存在 |
- 变量
申请一个变量用 var语句
1 | var a; |
使用var申明的变量不是全局变量,它的范围被限制在该变量被申明的函数体中.
Map和Set
Map是一组键值对的结构,具有极快的查找速度。
1 | var m = new Map([['w',95],['b',1],['t',5]]); |
1 | var m = new Map(); // 空Map |
Set是一组key的集合
1 | var s1 =new Set(); |
Iterable
遍历Array
可以采用下标循环,遍历Map
和Set
就无法使用下标。为了统一集合类型,ES6标准引入了新的iterable
类型,Array
、Map
和Set
都属于iterable
类型。
具有iterable
类型的集合可以通过新的for ... of
循环来遍历。
函数
定义函数
1 | var abs = function(x) |
调用函数
1 | abs(10) //返回10 |
arguments
它只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数。arguments
类似Array
但它不是一个Array
:利用arguments
,你可以获得调用者传入的所有参数。也就是说,即使函数不定义任何参数,还是可以拿到参数的值:
1 | function abs() { |
全局作用域
不在任何函数内定义的变量就具有全局作用域,实际上,Javascript默认有一个全局对象window,全局作用域的变量实际上被绑定到window的一个属性
为了解决块级作用域,ES6引入了新的关键字let
,用let
替代var
可以申明一个块级作用域的变量:
方法
1 | var person = |
绑定到对象上的函数称为方法,和普通函数也没啥区别,但是它在内部使用了一个this
关键字.在一个方法内部,this
是一个特殊变量,它始终指向当前对象,也就是person
这个变量。所以,this.a
可以拿到xiaoming
的a
属性。
标准对象
Date
Date 对象用来表示日期和时间
1 | var now = new Date(); |
创建一个指定日期和时间的Date对象
1 | var d = new Date(2015, 5, 19, 20, 15, 30, 123); |
JSON
在JavaScript中,我们可以直接使用JSON,因为JavaScript内置了JSON的解析。
序列化
1 | var person = |
反序列化
拿到一个JSON格式的字符串,我们直接用JSON.parse()
把它变成一个JavaScript对象:
1 | JSON.parse('[1,2,3,true]'); // [1, 2, 3, true] |
JSON.parse()
还可以接收一个函数,用来转换解析出的属性:
面向对象
JavaScript不区分类和实例的概念,而是通过原型(prototype)来实现面向对象编程。
1 | var Student = { |
JavaScript的原型链和Java的Class区别就在,它没有“Class”的概念,所有对象都是实例,所谓继承关系不过是把一个对象的原型指向另一个对象而已。
创建对象
JavaScript对每个创建的对象都会设置一个原型,指向它的原型对象。当我们用obj.xxx
访问一个对象的属性时,JavaScript引擎先在当前对象上查找该属性,如果没有找到,就到其原型对象上找,如果还没有找到,就一直上溯到Object.prototype
对象,最后,如果还没有找到,就只能返回undefined
。
浏览器
浏览器对象
- window
window对象不但充当全局作用域,还表示浏览器窗口.
- navigator
navigator对象表示浏览器的信息.
- screen
screen 对象表示屏幕的信息.
- location
location 对象表示当前页面的URL信息
- document
document对象表示当前页面.用document
对象提供的getElementById()
和getElementsByTagName()
可以按ID获得一个DOM节点和按Tag名称获得一组DOM节点.
document 对象还有一个cookie属性,可以获取当前页面的cookie 通过docement.cookie读取当前页的cookie
- history
history 对象保存了浏览器的历史记录,JavaScript可以调用history对象的back()或者forward(),相当于用户点击了后退或者前进.
操作DOM
首先拿到节点,最常用的方法就是document.getElementById()和documment.getElementsByTagName()
以及CSS选择器document.getElementByClassName()
.
更新DOM
一种是修改innerHTML
属性,这个方式非常强大,不但可以修改一个DOM节点的文本内容,还可以直接通过HTML片段修改DOM节点内部的子树,第二种是修改innerText
或textContent
属性,这样可以自动对字符串进行HTML编码,保证无法设置任何HTML标签.
还可以设置CSS
1 | // 获取<p id="p-id">...</p> |
操作表单
HTML表单的输入控件主要有以下几种:
- 文本框,对应的
<input type="text">
,用于输入文本; - 口令框,对应的
<input type="password">
,用于输入口令; - 单选框,对应的
<input type="radio">
,用于选择一项; - 复选框,对应的
<input type="checkbox">
,用于选择多项; - 下拉框,对应的
<select>
,用于选择一项; - 隐藏文本,对应的
<input type="hidden">
,用户不可见,但表单提交时会把隐藏文本发送到服务器。
如果我们获得了一个<input>
节点的引用,就可以直接调用value
获得对应的用户输入值.
这种方式可以应用于text
、password
、hidden
以及select
。但是,对于单选框和复选框,value
属性返回的永远是HTML预设的值,而我们需要获得的实际是用户是否“勾上了”选项,所以应该用checked
判断.
提交表单
js两种方式提交表单,方式一是通过<form>
元素的submit()
方法提交一个表单,例如,响应一个<button>
的click
事件,在JavaScript代码中提交表单:
1 | <form id="test-form"> |
这种方式的缺点是扰乱了浏览器对form的正常提交。浏览器默认点击<button type="submit">
时提交表单,或者用户在最后一个输入框按回车键。
因此,第二种方式是响应<form>
本身的onsubmit
事件,在提交form时作修改.
1 | <form id="test-form" onsubmit="return checkForm()"> |
Author: corn1ng
Link: https://corn1ng.github.io/2017/10/06/JS快速入门/
License: 知识共享署名-非商业性使用 4.0 国际许可协议