1、JavaScript允许对任意数据类型做比较
2、NaN与所有其他值都不相等,包括自己
3、JavaScript对象的键都是字符串类型
字符串
4、字符串是不可变的,如果对字符串的某个索引赋值,不会有错误,但是也没有效果
5、字符串的常用方法:调用这些方法不会改变原有字符串的内容,而是返回一个新的字符串
toUpperCase():
把一个字符串全部变为大写
toLowerCase():
把一个字符串全部变为小写
indexOf():
搜索指定字符串出现的位置
substring():
返回指定索引间的子串
split():
切分字符串
6、直接给数组的length赋一个新值会导致数组发生变化;
如果通过索引赋值时,索引超过了范围,同样会引起数组发生变化
数组
7、数组的常用方法:
indexOf:
搜索指定元素的位置
var arr = [1,3,5,7,9];
arr.indexOf(5);//2
arr.indexOf(2);//-1
slice():
截取数组的部分元素,返回的是一个新的数组
如果不给slice传参数,它会从头到尾截取所有元素,相当于复制了一个新的数组
push():
向数组的末尾添加元素
pop():
把数组的最后一个元素删掉
unshift():
向数组的头部添加元素
shift():
删掉数组的第一个元素
sort():
对数组进行排序
reverse():
反转数组
splice():
从指定位置删除元素,返回被删除的元素组成的数组
concat():
连接两个数组,返回一个新的数组,没有修改当前数组
join():
把数组的每个元素都用指定的字符连接起来,返回连接后的字符串
var arr = [1,2,3];
arr.join('-');//1-2-3
对象
1、对象是动态类型,可以自由的添加和删除对象的属性
var person = {
name:'kkk',
}
person.age = 18;//新增一个属性age
person['sex']='女';//新增一个属性
delete person.age;//删除一个属性
2、检测对象中是否拥有某一属性,使用in
操作符,如果判断一个属性是否存在,使用in,但是这个属性不一定是该对象的,有可能是该对象继承的属性
'name' in person;//true
判断一个属性是否是某对象自身拥有的,而不是继承的,使用hasOwnProperty()
person.hasOwnProperty('name');//true
3、JavaScript把null、undefined、0、NaN、’ '
视为false
循环
for…in
遍历对象的属性
while循环
:在已知循环的初始和结束条件时非常有用
for…of和for…in的区别???
- 具有iterable类型的集合可以通过for…of循环遍历,for…in是采用下标进行循环遍历的。
- 可以自己给无法使用for…of遍历的数据结构增加iterable
var obj={'a':1,'b':2,'d':3}
obj[Symbol.iterator] = function* iterEntries() {
let keys = Object.keys(this);
for (let i = 0; i < keys.length; i++) {
let key = keys[i];
yield [key, obj[key]];
}
}
for(var o of obj){
console.log(o);
}
函数
1、arguments:
只在函数内部起作用,指向当前函数传入的参数,类似一个数组,但不是数组。
2、rest参数:
rest参数作为定义函数的最后一个参数,前面用…标识(function(a,b,…rest){}),用来接收多余的参数。
变量提升
3、JavaScript函数会先扫描整个函数体的语句,把所有申明的变量提升到函数顶部,但是,JavaScript引擎只是自动提升了变量的声明,并不会提升变量的赋值。
4、全局变量会绑定到window上,不同的JavaScript文件如果使用了相同的全局变量,或者定义了相同的顶层函数,都会造成命名冲突。
5、const和let具有块级作用域
6、在一个对象中绑定函数,称为这个对象的方法。在一个方法的内部,this
始终指向当前对象。如果单独调用函数,函数的this
指向全局对象,就是window。
高阶函数
1、map():
map()方法定义在JavaScript的Array中,有一种循环遍历数组元素进行操作的感觉。类似于forEach()方法,但是map方法返回一个新的数组,而forEach()方法不会返回新的数组。
2、reduce():
reduce()方法是定义在JavaScript的Array中,这个函数必须传两个参数,reduce()是把结果和序列的下一个元素做累积计算.
3、filter():
用于把数组的某些元素过滤掉,filter接收一个函数,filter()把传入的函数依次作用于每个元素,根据返回值是true和false决定保留与否。
- 可以利用filter()除去数组中重复的元素
去除重复元素是根据indexOf总是返回第一个元素的位置,后续的重复元素的位置与indexOf返回的位置不相等,因此被过滤。
4、every():
every()
可以判断数组的所有元素
是否满足测试条件。
5、find():
find()方法用于查找符合条件的第一个元素,如果找到,返回这个元素,否则,返回undefined。
6、findindex():
findindex()方法查找符合条件的第一个元素,如果找到,返回这个元素的索引,如果没有找到,返回-1。
闭包
在一个函数中又定义了一个函数,并且内部函数可以引用外部函数的参数和局部变量,当外部函数返回内部函数时,相关参数和变量都保存在返回的函数中。
this指向
1、普通函数中
- this总是指向它的
直接调用者
,例如obj.function(),那么function中的this就是指向obj。 - 在非严格模式下,没有直接调用者,this指向window。
- 在严格模式下,没有直接调用者,this指向undefined。
2、箭头函数中
- 箭头函数没有自己的this,它的this是继承来的,默认指向在
定义
它时所处的对象。
标准对象
Date
- 获取当前系统时间
var dateNow = new Date();
- 获取当前时间戳
//1、
Date.now();
//2、
new Date().getTime()
RegExp正则表达式
\d
可以匹配一个数字;
\w
可以匹配一个字母或数字;
.
可以匹配任意一个字符;
*
可以表示任意个字符;
+
可以表示至少一个字符;
?
可以表示0或1个字符;
{n}
可以表示n个字符…
JSON
1、JSON的字符串规定必须使用双引号,object的键也必须使用双引号。
2、JSON.stringify():
将对象序列转换为JSON格式的字符串
3、JSON.parse():
将JSON格式的字符串转换为JavaScript对象。
浏览器对象
window
1、window对象可以表示浏览器窗口
2、window对象的属性(大小根据浏览器的缩放会发生改变):
innerWidth和innerHeight:
可以获取浏览器窗口的内部宽度和高度,(内部宽度指除去菜单栏、工具栏、边框等占位元素后)outerWidth和outerHeight:
获取浏览器窗口的整个宽高。
screen
1、screen对象表示屏幕的信息
2、screen.width和screen.height:屏幕的宽度和高度,以像素为单位,不会根据浏览器的缩放而发生改变。
document
document对象表示当前页面;HTML在浏览器中以DOM形式表示树形结构,document对象就是整个DOM树的根节点。
getElementById():
按ID获得一个DOM节点getElementByTagName():
按Tag名称获得一组DOM节点createElement():
创建一个空节点
history
history对象的back()
和forward()
,相当于用户点击了浏览器的后退或前进按钮。
操作DOM
1、innerHTML属性
修改节点文本
document.getElementById("pid").innerHTML="哈哈哈";
2、style属性
对应所有的css
document.getElementById("pid").style.color="#fff";
document.getElementById("pid").style["font-weight"]="bold";
document.getElementById("pid").style.fontweight="bold";
3、appendChild属性
把一个子节点添加到父结点的最后一个子节点之后
4、parentElement.insertBefore(newElement,referenceElement)
将子节点添加到referenceElement之前。
5、children属性
获取父结点的所有子节点
6、parentElement属性
获取子节点的父元素
7、removeChild
删除DOM节点,首先获得该节点本身以及它的父结点,然后调用父结点的把自己删掉。
操作表单
1、value属性
获得用户输入的值。
2、checked属性
返回单选框的复选框的选中状态。