基础知识
数据类型
基本数据类型:number、string、boolean、undefined、null
引用数据类型:Array、Function、Object
类型转换
转换为true:非空字符串、非0数字、任何对象
转换为false:空字符、0、false、null、undefined
堆和栈
栈区:存储基本数据类型和引用数据类型的地址
堆区:存储引用数据类型的数据
1. 函数
封装性、将执行代码封装在一个独立的执行环境中。可以反复调用,减少代码冗余
函数体内提供的一个伪数组。argument中存放所有实参
1. return
作用:终止函数的执行,将结果返回给调用者,调用者可以用变量接收返回的结果。
function 函数名() { //函数体内没有return; 默认返回undefined //return 数据; 终止函数并返回数据 //return; 终止函数返回undefined }
2. 作用域链
当访问一个变量时,会先从本作用域中找,若找不到则向上一级作用域中找,以此类推就形成了一个作用域链。
3. 预解析
程序在执行之前的一个准备过程,这个过程就是预解析。预解析要做两件事情。
- 把变量名提升到当前执行环境的顶部
- 把函数体提升到当前执行环境的最顶部
2. 对象
1. 创建方式
①通过new关键字调用系统提供的object构造函数;
var 变量名 = new Object(); or var 变量名 = { }; //字面量写法推荐使用,推荐使用
②自定义构造函数;
function stu (n, a, g){ this.name = n; this.age = a; this.gender = g; } var stu1 = new stu('张三', 12, '男')
2. 普通函数与构造偶函数区别
命名规则区别:普通函数采用驼峰命名,构造函数采用帕斯卡命名法(首字母大写);
调用方式:普通函数直接调用,构造函数需要通过new调用;
目的不同:普通函数实现一些功能,构造函数专门来创建对象。
3. 系统提供的构造函数与自定义狗杂函数区别
系统提供的构造函数创建的对象叫内置对象
自定义构造函数创建的对象叫做自定义对象
4. new关键字作用
调用构造函数创建对象
执行过程
①在内存中创建一个空的对象
②让this指向这个空对象
③通过this给这个对象添加属性和方法
④将对象返回给调用构造函数的调用者
object是JS中祖宗类,所有不同类型的对象,都直接或间接继承与它
1. 对象的操作
给对象设置属性和方法: 对象名.键名 = 值 or 对象名['键名'] = 值
删除对象中属性和方法: delete 对象.键名 or delete 对象['键名']
检测属性和方法: 对象.hasOwnProperty('键名')
遍历对象的键值对:
for(var key in obj){ console.log( obj[key] ); //遍值 console.log( key ); //遍键名 }
检测对象的类型(检测对象类型不要用typeof):对象 instanceof 构造函数
5. 内置对象
Math对象
Math.abs(数字);获取一个数字的绝对值
Math.round(数字);四舍五入
Math.PI; π
Math.ceil(数字);向上取整
Math.floor(数字);向下取整
Math.random(); 随机数 [ 0, 1 )
Math.max(数字,数字.....);求最大数
Math.min(数字,数字......);求最小数
Date对象
1. 创建Date类型对象
var 变量 = new Date(); //创建当前时间对象
var 变量 = new Date('2019-2-2 3:3:3'); or var 变量 = new Date('2019/2/2 3:3:3'); //创建指定时间
var 变量 = new Date( value ); //创建1970年开始value毫秒后的事件对象
var data = new Date(2018, 6,6,12,12,12,12); //
2. 常用Data对象方法
获取和设置年月日
日期对象.getFullYear() / 日期对象.setFullYear()
日期对象.getFullMonth() / 日期对象.setFullMonth()
日期对象.getDate() / 日期对象.setDate()
获取和设置时分秒
日期对象.getHours() / 日期对象.setHours()
日期对象.getMinutes() / 日期对象.setMinutes()
日期对象.getSeconds() / 日期对象.setHours()
获取星期天数
日期对象.getDay(); // 0-6(周日0到周六6)
获取1970年至今的总毫秒数
日期对象.getTime() / 日期对象.setTime(数字);
Array对象
向数组前后中添加元素
arr.unshift( ele1, ele2.....); //向数组开头添加,并返回新的长度
arr.push(ele, ele2......); //向数组结尾添加
从数组前后删除元素
arr.shift(); // 删除并返回数组第一个元素
arr.pop(); // 删除并返回数组最后一个元素
数组任意位置添加,删除
arr.splice(index,how,item1,item2...); //index从哪个位置开始删除;how删几个
数组元素的查询
arr.indexOf(); //返回找到元素第一个索引,不存在返回 -1
数组元素的拼接
arr.join();把数组元素放入一个字符串
var arr = [1,2,3] arr.join('=') //输出便是‘1=2=3’
数组的反转和排序
arr.reverse(); //颠倒数组元素顺序
arr.sort(); //默认排序是根据字符串Unicode吗
arr.sort(function(a, b){ //升序 return a-b }) arr.sort(function(a, b){ //降序 return b-a })
扩展方法
//数组遍历 arr.forEach(function(value, index){ console.log(value) }) //过滤符合条件的元素,返回一个新数组 arr.filter(function(value,index){ return value > 50 }) //验证数组每一个元素是否符合指定条件,返回布尔 arr.every(function(value, index){ return 条件 }) //验证数组中元素是否有符合指定条件的返回布尔 arr.some(function(value, index){ return 条件 }) //遍历数组中每一个元素,更改后存入一个新数组,并返回新数组 arr.map(function(value, index){ return value*2 })
string对象
字符串不可变性:var str = ‘abc’;str = ‘hellow’;从新给var赋值数据‘abc’不会被修改依然在内存中,重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变性
字符串所有的方法,都不会修改字符串本身,操作完成后会返回一个新的字符串
获取字符串的单个字符
str.charAt(index) or str[ index ]
字符串的拼接和截取
str.concat(art1,art2...) or str1 + str2
str.slice(star, end) //截取
去除空白符
str.trim(); //去除两边空白符
字符大小写转换
str.toUpperCase(); //转换大写
str.toLowerCase(); //转换小写
字符串替换
str.replace(old, new)
字符串分隔
str.split(); //把一个字符串分隔成数组
只有DOM对象才能调用H5提供的API
1. 获取元素
querySelector(选择器); querySelectorAll(选择器)
2. 类名操作
添加:ele.classList.add(类名)
移除:ele.classList.remove(类名)
切换:ele.classList.toggle(类名)
是否存在:ele.classList.contains(类名)
classList描述当前元素,是一个维数组,里边存放了当前元素的类名
3. 自定义属性
h5规定自定义属性必须以“data-”开头,才认为是自定义属性规范
ele.dataset:获取所有
ele.dataset-name:获取单个(遵循驼峰命名法data-user-name → dataset.username去获取;不遵循大小写data-userName → dataset.username获取)
ele.dataset.age = 10:设置自定义属性
delete ele.dataset.age:删除自定义属性
4. 全屏操作
开启:requestFullScreen()
取消:cancelFullScreen(), 调用的是document
检测是否全屏:IsFullScreen(),由于兼容问题浏览器需要加前缀