此文章根据老师上课划的重点进行整理
var关键字:传统方式
let关键字:现代JavaScript中的方式
两者的区别:
let声明的变量只在代码块内有效,实现块级作用域,而var声明的变量没有块级作用域,只有函数作用域和全局作用域。
var声明的变量存在变量提升,而let声明的变量不存在变量提升。
var声明提高到所属作用域的顶端:如var声明变量在任何函数之外,则变量的作用域会提升到整个代码的最高处(全局变量);在函数体内使用var声明变量,其作用域会被提升至所在函数。
注意:
仅声明被提升,赋初值仍在原位置;
变量提升不会跨script块。
“变量提升”现象:即变量可以在声明之前使用,值为undefined。
let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。
常量在脚本代码整个运行过程中保持不变
使用const声明常量时,必需赋初值
const 常量名 = 值
常量不能重复声明
允许嵌入表达式的字符串字面量
使用反引号 (``) 来代替普通字符串中的用双引号和单引号
模板字符串可以包含特定语法(${expression})的占位符
加号
其他操作符
减(-)、乘(*)、除(/)、取余(%)两边存在字符串时,字符串自动转换为数字(如有无法转换操作数,则结果为NaN)
++和–,字符串自动转换为数字,无法转换的结果为NaN
‘>、<、==、<=、>=’:表达式包含数字和字符串时,字符串自动转换为数字,不能转换成数字的字符串或其它类型值,表达式均返回false
当比较两个字符串的大小时,按ASCII码比较,比较true false null 的大小时,按值比较( true=1, false=null=0)
!:将操作数转换为布尔值后取反
非零数值和非空字符串能够转换为true,零和空字符串能够转换为false
有名函数,函数名称为函数变量;匿名函数赋值于某变量后,该变量为函数变量
函数变量的值为整个函数定义语句
定义方法一:有名函数
function 函数名([参数列表]) {
函数体;
[return [表达式];]
}
定义方法二:函数表达式(匿名函数)
变量名 = function ([参数列表]) {
函数体;
[return [表达式];]
}
定义方法三: 箭头函数
(参数1, 参数2, …, 参数N) => { 函数声明; }
var f = (num1, num2) => {
return num1 * num2;
};
(参数1, 参数2, …, 参数N) => 表达式(单一)
var f = (num1, num2) => num1 * num2;
单一参数 => {函数声明}
var f = num => num * num;
() => {函数声明} // 无参数
var f = () => 'hello world';
let student = new Object();
student.num = '001';
student.sex = '男';
student.getAge = function(){
let now = new Date();
...
}
let s2 = {
num = '002';
sex = '女';
getAge: function(){
...
}
}
方法三:使用构造函数模式
构造函数实质上是具有如下特点的普通函数
function s3(num, sex){
this.num = num;
this.sex = sex;
this.getAge = function(){
...
};
};
function s4(num, sex){
this.num = num;
...
}
//使用prototype定义Student
s3.prototype.getAge = function(){
...
}
class s5{
constructor(num, sex){
this.num = num;
...
}
getAge(){
...
}
}
JavaScript中的数组为Array对象,Array为JavaScript语言内置对象
let a1 = [5, 10. 15];
let a2 = ['aaa', 'bbb', 'ccc']
let a3 = new Array('a1', 'a2', 'a3');
console.log(a1[1]); // 10
console.log(a2[0]); // aaa
console.log(a3[a3.length - 1]); // a3
数组元素的常用属性及方法
length属性: 可读写,读返回数组中元素的个数,写可增加或减少元素的个数
push(e1, …, en):将参数指定的元素依次添加到数组的末尾,并返回新数组的长度
pop():弹出(返回,并在数组中删除)数组最末一个元素
shift(): 删除数组的第一个元素,并返回该元素
unshift(e1, …, en): 将参数e1, …, en依次添加到数组的开头,并返回新数组的长度
splice(index, count[, e1, …, en): 在数组中删除、替换或添加元素
删除元素:只提供index和count两个参数,删除从index位置开始的count个元素,并返回删除的元素数组
let a = [1, 2, 3, 4, 5];
let e = a.splice(2, 1); // 从索引为2的位置开始,删除1个元素
console.log(e); // (1) [3],被删除元素组成的数组
console.log(a); // (4) [1, 2, 4, 5],改变后的数组
替换元素:提供三个以上参数,前两个参数的作用与1相同,在1删除的基础上,第三个及之后的参数被插入到index位置,返回值与1相同
let a2 = [1, 2, 3, 4, 5];
// 从索引为2的位置开始,删除2个元素,并将元素10播放到索引为2的位置
let e2 = a2.splice(2, 2, 10);
console.log(e2); // (2) [3, 4]
console.log(a2); // (4) [1, 2, 10, 5]
a2.splice(1, 1, 6); // a2[1] = 6
console.log(a2); // (4) [1, 6, 10, 5 ]
添加元素:提供三个以上参数,第二个count参数值为0,此时不删除元素,只在index位置插入第三个及之后的参数,返回值为空数组
let a3 = [1, 2, 3, 4, 5];
// 从索引为2的位置开始,删除0个元素,并将元素10播放到索引为2的位置
let e3 = a3.splice(2, 0, 10);
console.log(e3); // []
console.log(a3); // (6) [1, 2, 10, 3, 4, 5]
sort()或sort(compareFunction):对数组元素排序
forEach(function(currentValue[, index[, array]])[, thisArg]): 对数组中的每个元素执行一次回调函数
filter(function(currentValue[, index[, array]])[, thisArg]): 对所有元素依次应用回调函数,返回一个新数组,包含所有回调函数返回true的元素
生成一个新的数组,其中的元素为指定数组中的元素应用回调函数返回值
reduce(function(previousResult, currentValue[, index[, array]])[, initialValue]):使用回调函数对数组中的每个元素进行处理,并将处理结果汇总返回,其中:
JSON(JavaScript Object Notation, JavaScript对象表示法)是一种轻量级数据交换格式,易于理解,易于解析与生成,基于JavaScript的一个子集。
JSON数据采用文本格式,独立于编程语言。
JavaScript原生支持生成与解析JSON格式数据,主流编程语言均支持JSON格式,是目前前后端数据交互的主流数据格式之一。
相比XML,JSON可读性更好,更轻量。
let studentJson = '{"name": "小明", "gender": "男", "dob": "1990-01-01"}';
let studentJson = '{"name": "小明", "gender": "男", "dob": "1990-01-01"}';
let student = JSON.parse(studentJson);
console.log(typeof student); // object
console.log(student.name); // 小明
console.log(student.gender);// 男
console.log(student); // {“name": "小明", "gender": "男", "dob":... ...
let s1 = {name: '小红', gender: '女', dob: new Date('1991-6-2')};
let s2 = {name: '小刚', gender: '男', dob: new Date('1991-5-16')};
let students = [s1, s2];
console.log(JSON.stringify(students));
// [
// {"name":"小红","gender":"女","dob":"1991-06-01T15:00:00.000Z"},
// {"name":"小刚","gender":"男","dob":"1991-05-15T15:00:00.000Z"}
// ]
Promise是ES 6新增的用于异步操作的对象,它包装了异步操作的最终完成和结果
Promise对象包装了一个将来会得到、当前未知的结果(如AJAX请求的响应),允许设置操作成功完成和失败时的回调函数
通过使用Promise,异步方法可以像同步方法一样返回值:一个Promise对象
采用CSS的媒体查询(media query)技术,将三种已有的开发技巧,包括弹性网格布局、弹性图片、媒体和媒体查询整合在一起
移动优先的响应式布局采用的是渐进增强原则,制作响应式网站时,先搞定手机版,然后再去为更大设备去设计和开发更复杂的功能。特征是使用min-width匹配页面宽度。从上到下书写样式时,首先考虑的是移动设备的使用场景,默认查询的是最窄的情况,再依次考虑设备屏幕逐渐变宽的情况。
由简入繁易,由繁入简难。如果是桌面优先,布局端是桌面端代码,只有在media中,才是手机端代码,加载了多余的桌面端代码。如果是图片文件,则下载的无用资源更多。
参考课本吧