JavaScript
Contents
语法
1 | var x =1; // 赋值语句 |
数据类型
number
字符串
布尔值(始终坚持使用===运算符)
null 和 undefined
数组 [1, 2, 3.14, ‘hello’, null, true];
对象
1
2
3
4
5
6
7
8
9
10var person =
{
name:'wkn',
age:22,
tags:['java','python','javascript'],
city:'guangzhou',
'has-girlfriend':false,//有特殊字符要圈起来
zipcode:null
}
//获取时使用 person.name //wkn
字符串
用单引号或者双引号引起来的。如果字符串内部既包含'
又包含"
怎么办?可以用转义字符\
来标识。
多行字符串可以用反引号引起来
1 | var s = "hello javascript"; |
数组
1 | var arr = [1, 2, 3.14, 'Hello', null, true]; |
Map 和 Set
1 | var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]); |
iterable
ES6 引入新的iterable 类型,Array,map,set 都属于iterable 类型。具有iterable 类型的集合可以用for of 循环来遍历。
1 | var a = ['A', 'B', 'C']; |
函数
1 | function abs(x) { |
由于JavaScript允许传入任意个参数而不影响调用,因此传入的参数比定义的参数多也没有问题,虽然函数内部并不需要这些参数。
argument and rest
JavaScript还有一个免费赠送的关键字arguments
,它只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数。arguments
类似Array
但它不是一个Array
1 | function foo(x) { |
作用域
由于JavaScript的变量作用域实际上是函数内部,我们在for
循环等语句块中是无法定义具有局部作用域的变量的。为了解决块级作用域,ES6引入了新的关键字let
,用let
替代var
可以申明一个块级作用域的变量。
方法
1 | var xiaoming = { |
标准对象
JSON
序列化(将对象转化为JSON 字符串)
1 | var xiaoming = { |
反序列化
JSON 字符串变成js 对象
1 | JSON.parse('[1,2,3,true]'); // [1, 2, 3, true] |
浏览器
window 对象
window对象不仅充当全局作用域,还标识浏览器窗口。window
对象有innerWidth
和innerHeight
属性,可以获取浏览器窗口的内部宽度和高度。内部宽高是指除去菜单栏、工具栏、边框等占位元素后,用于显示网页的净宽高。还有一个outerWidth
和outerHeight
属性,可以获取浏览器窗口的整个宽高。
navigator 对象
navigator
对象表示浏览器的信息,最常用的属性包括:
- navigator.appName:浏览器名称;
- navigator.appVersion:浏览器版本;
- navigator.language:浏览器设置的语言;
- navigator.platform:操作系统类型;
- navigator.userAgent:浏览器设定的
User-Agent
字符串。
screen 对象
screen
对象表示屏幕的信息,常用的属性有:
- screen.width:屏幕宽度,以像素为单位;
- screen.height:屏幕高度,以像素为单位;
- screen.colorDepth:返回颜色位数,如8、16、24。
location
1 | location.protocol; // 'http' |
document
document
对象表示当前页面。由于HTML在浏览器中以DOM形式表示为树形结构,document
对象就是整个DOM树的根节点。
document
的title
属性是从HTML文档中的<title>xxx</title>
读取的,但是可以动态改变。
cookie
document
对象还有一个cookie
属性,可以获取当前页面的Cookie。
操作dom
HTML 文档被浏览器解析后就是一颗DOM树。操作DOM 节点实际上就是更新,遍历,添加,删除的操作。
在操作一个DOM节点前,我们需要通过各种方式先拿到这个DOM节点。最常用的方法是document.getElementById()
(返回一个结点)和document.getElementsByTagName()
(返回一组),以及CSS选择器document.getElementsByClassName()
(返回一组)。
更新DOM
修改内容1.修改innerHTML 属性 2.修改innerText 或者textContext属性。
修改css: DOM节点的style
属性对应所有的CSS,可以直接获取或设置。因为CSS允许font-size
这样的名称,但它并非JavaScript有效的属性名,所以需要在JavaScript中改写为驼峰式命名fontSize
.
1 | // 获取<p id="p-id">...</p> |
插入DOM
1如果这个DOM节点是空的,例如,<div></div>
,那么,直接使用innerHTML = '<span>child</span>'
就可以修改DOM节点的内容,相当于“插入”了新的DOM节点。
2.非空
(1) 使用 appendChild
(2) 如果我们要把子节点插入到指定的位置怎么办?可以使用parentElement.insertBefore(newElement, referenceElement);
,子节点会插入到referenceElement
之前。
删除DOM
要删除一个节点,首先要获得该节点本身以及它的父节点,然后,调用父节点的removeChild
把自己删掉.
操作表单
1 | 文本框,对应的<input type="text">,用于输入文本; |
获取值
如果获取了一个input结点的引用,直接调用value 获取对应用户输入值。这种方式可以应用于text
、password
、hidden
以及select
。但是,对于单选框和复选框,value
属性返回的永远是HTML预设的值,而我们需要获得的实际是用户是否“勾上了”选项,所以应该用checked
判断。
提交表单
通过
1
2
3
4
5
6
7
8
9
10
11
12
13
14<!-- HTML -->
<form id="test-form">
<input type="text" name="test">
<button type="button" onclick="doSubmitForm()">Submit</button>
</form>
<script>
function doSubmitForm() {
var form = document.getElementById('test-form');
// 可以在此修改form的input...
// 提交form:
form.submit();
}
</script>相应
1
2
3
4
5
6
7
8
9
10
11
12
13<form id="test-form" onsubmit="return checkForm()">
<input type="text" name="test">
<button type="submit">Submit</button>
</form>
<script>
function checkForm() {
var form = document.getElementById('test-form');
// 可以在此修改form的input...
// 继续下一步:
return true;
}
</script>
AJAX
1 | function success(text) { |
当创建了XMLHttpRequest
对象后,要先设置onreadystatechange
的回调函数。在回调函数中,通常我们只需通过readyState === 4
判断请求是否完成,如果已完成,再根据status === 200
判断是否是一个成功的响应。
XMLHttpRequest
对象的open()
方法有3个参数,第一个参数指定是GET
还是POST
,第二个参数指定URL地址,第三个参数指定是否使用异步,默认是true
,所以不用写.
最后调用send()
方法才真正发送请求。GET
请求不需要参数,POST
请求需要把body部分以字符串或者FormData
对象传进去。