JavaScript学习笔记
变量、函数的声明会自动提到头部。赋值的不算。
this指window、global,new的时候就是全新构造的?
apply和call模式可以指定this的对象。
基础部分
- 传递:JS中没有传值,只有传引用。
- 字符串:字符串的变量值不可更改==?==
parseInt() 函数可解析一个字符串,并返回一个整数。 - 布尔值:任何值都可以是Boolean值:除0,0.0,NaN,null,undefined,“”之外的值,都是真
- 特殊值:NaN:not a number undefined:没有声母,不存在 null:存在,但是赋予空值
- 逻辑符号:会自动转换数据类型,例如5<"7"为真,
42==42.0
为真。严等符号===和!==
则还会检查数据类型,例如"5.0"===5
则是假。 - 全局变量:函数外声明的,和函数内没有用var声明的变量。慎用全局变量。
- 局部变量:函数内用var声明的变量。
- 作用域:以函数做分界线,而不是用{}块做分界线。
- 数组:数组大小可以自动增长,数据类型可以不同。
赋值方法有两种:a2.push()方法和a2[100]=“Yeah”。
常用方法:
常用方法 | 效果 |
---|---|
push(value) ,push(v1,v2,v3) | 将一到多个值压入数组 |
pop() | 弹出数组 |
reverse() | 反序 |
sort() | 排序 |
shift() | 取头部,并向前移动 |
unshift() | 添头部,并往后移 |
contact(array1,…,arrayN) | 将多个数组拼接为一个 |
join(),join("!") | 将数组以"!"为分隔符拼接成一个字符串 |
slice(a,b),slice(a) | 返回从a到b(省略b则默认数字长度)的子数组 |
splice(index,count,v1,…,vN) | 将数组从index起count个元素删除,并更换为v1,…,vN |
split(),split("!") | 将字符串按分隔符("!")拆为一个数组 |
DOM
DOM style property:可以用来在函数中改变网页外观,注意单位。非侵入式用法:定义一个未使用的CSS样式,将样式的className赋予html元素。
NODE:一切皆是节点,通过节点操控网页
节点类型 | 指代 |
---|---|
文档节点 | 整个文档 |
元素节点 | 每个 HTML 元素 |
文本节点 | HTML 元素内的文本 |
属性节点 | 每个 HTML 属性 |
注释节点 | 注释 |
常用属性 | 含义 |
---|---|
innerHTML | 节点(元素)的文本值,例如<div>内的<p>,<p>中的文本 |
parentNode | 节点(元素)的父节点 |
childNodes | 节点(元素)的子节点 |
attributes | 节点(元素)的属性节点 |
nextSibling | 下一个同胞节点 |
nodeName | 只读,元素节点、属性节点的 nodeName 与属性名相同, 文本节点的 nodeName 始终是 #text, 文档节点的 nodeName 始终是 #document。 |
nodeValue | 元素节点的 nodeValue 是 undefined 或 null, 文本节点的 nodeValue 是文本本身, 属性节点的 nodeValue 是属性值。 |
常用方法 | 描述 |
---|---|
getElementById() | 返回带有指定 ID 的元素。 |
getElementsByTagName() | 返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)。 |
getElementsByClassName() | 返回包含带有指定类名的所有元素的节点列表。 |
appendChild() | 把新的子节点添加到指定节点。 |
removeChild() | 删除子节点。 |
replaceChild() | 替换子节点。 |
insertBefore() | 在指定的子节点前面插入新的子节点。 |
createAttribute() | 创建属性节点。 |
createElement() | 创建元素节点。 |
createTextNode() | 创建文本节点。 |
getAttribute() | 返回指定的属性值。 |
setAttribute() | 把指定属性设置或修改为指定的值。 |
EVENT:给html添加事件有三种方法,推荐第三种
添加事件的三种方法
event.target——发生事件的html对象
常用事件
TIMER:计时器有两种
传递参数的方法
非侵入式代码
在js中给id为“ok”的html元素赋予click的事件
存在问题:在页面未加载完毕,就会调用并声明js,会出现没找到id为“ok”的情况。故应该把这些给html元素赋予事件的声明,放进window.onload的函数中,如下所示。不妨把所有声明先放进**pageLoad()**函数中,然后由window.onload()调用。
常见错误:1、不需要写()的地方。2、事件名称不需要大写。
动态对象
对象是带有属性和方法的特殊数据类型。
JavaScript 中的所有事物都是对象:字符串、数值、数组、函数…
此外,JavaScript 允许自定义对象,如下图用名值对的形式创建对象。
创建函数对象
function person(firstname,lastname,age,eyecolor)
{
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
}
给对象添加函数属性
function person(firstname,lastname,age,eyecolor)
{
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
this.changeName=changeName;
function changeName(name)
{
this.lastname=name;
}
}
Prototype原型:所有的 JavaScript 对象都会从一个原型对象中继承属性和方法。
给函数对象添加属性,必须在如上的构造子中添加。否则就要用到原型属性,跟C++类的继承相似。
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
Person.prototype.nationality = "English";
闭包
闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰。
貌似是什么嵌套的内部函数访问外部函数的局部变量,我的理解是一个函数加一个“全局”变量形成闭包,再在最外层套上一个函数,形成闭包环境,返回内部函数,保护“全局”变量。
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
add();
add();
add();
// 计数器为 3
JQuery、lodash和moment
JQuery教程:动画相关 $ 符号
lodash入门:数据相关 _ 符号
moment:日期相关 moment()
JSON
JavaScript 对象表示法,JSON 是存储和交换文本信息的语法。