JavaScript学习笔记4
1.预解析
JavaScript解析器在运行JavaScript代码的时候分为两步:预解析和代码执行。
Js引擎会把js里面的所有的变量和函数提升到当前作用域的最前面
变量预解析(变量提升)和函数预解析(函数提升)
变量提升就是把所有的变量声明提升到当前的作用域最前面,不提升赋值操作。
函数提升,就是把所有函数声明提升到当前作用域的最前面,不调用函数。
代码执行,按照代码书写的顺序从上往下执行
1 | |
2.对象
在JavaScript中对象是一组无序的相关属性和方法的集合。
2.1创建对象的三种方法
利用字面量创建对象(**{}**)
1
2
3
4
5
6
7var obj = {
name: 'aa',
age: '18',
sex: 'man',
fn: function(){
}
}利用new object创建对象
1
2
3
4
5
6
7var obj = new Object();
obj.uname = 'aa';
obj.age = '18';
obj.sex = 'man';
obj.fn = function(){
}利用构造函数创建对象
构造函数是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与new运算符一起使用。我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面。
- 构造函数名字首字母要大写
- 构造函数不需要return就可以返回对象。
- 调用构造函数返回的是一个对象
- 调用构造函数必须使用new
- 我们只要new ()调用函数就创建一个对象。
- 属性和方法前面必须添加this
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18//声明构造函数
function 构造函数名(){
this.属性 = 值;
this.方法 = function(){
}
}
//调用
new 构造函数名();
//举例
function Example(name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
}
new Example('aa','18','man',);new关键字执行过程
- new 构造函数可以在内存中创建一个空的对象
- this 就会指向刚才创建的空对象
- 执行构造函数里面的代码,给这个空对象添加属性和方法
- 返回这个对象
2.2使用对象
- 调用对象的属性 对象名.属性名;对象名[‘属性名’]
- 调用方法 对象名.方法名()
2.3遍历对象
1
2
3
4for(var k in obj){
console.log(obj[k]);//属性值
console.log(k);//属性名
}3.内置对象
JavaScript中的对象分为三种:自定义对象、内置对象、浏览器对象
3.1Math对象
1 | |
1 | |
Math.PI() 圆周率
Math.floor() 向下取整
Math.ceil() 向上取整
Math.round() 四舍五入 就近取整 -3.5 结果是3
Math.abs() 绝对值
1
console.log(Math.abs('-1') )//隐式转换 ,会把字符串型-1转换为数值型Math.max()和Math.min()
Math.random()
返回一个随机小数(大于等于0小于1),方法里面不跟参数。
1 | |
2.得到一个两数之间的随机整数,包括两个数在内
1 | |
1 | |
3.2日期对象(Date)
Date日期对象是一个构造函数,必须使用new来创建日期对象
1 | |
如果没有提供参数,那么新创建的Date对象表示实例化时刻的日期和时间。
参数的常用写法 数字型(2020,01,09)或者是字符串型(’2020-01-09 8:8:9’)
日期格式化
方法名 说明 代码 getFullYear() 获取当前年份 date.getFullYear() getMonth() 获取当前月份(0-11) date.getMonth() getDate() 获取当天日期 date.getDate() getDay() 获取星期几(0-6) date.getDay() getHours() 获取当前小时 date.getHours() getMinutes() 获取当前分钟 date.getMinutes() getSeconds() 获取当前秒钟 date.getSeconds() 获取日期的总的毫秒数(时间戳)
Date对象是基于1970年1月1日(世界标准事件)起的毫秒数
- 通过valueOf()
- 通过getTime()
- var date = +new Date()
- H5新增Date.now()
倒计时小案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17//倒计时小案例
function countDown(time){
var nowTime = +new Date();//返回当前时间总的毫秒数
var inputTime = +new Date(time);//返回用户输入时间总的毫秒数
var times = (inputTime - nowTime) / 1000; //剩余时间的秒数
var d = parseInt(times / 60 /60 / 24);
d = d < 10 ? '0' + d : d;
var h = parseInt(times / 60 / 60 % 24);
h = h < 10 ? '0' + h : h;
var m = parseInt(times / 60 % 60);
m = m < 10 ? '0' + m : m;
var s = parseInt(times % 60)
s = s < 10 ? '0' + s : s;
return d + '天' + h + '时' + m + '分' + s + '秒';
}
console.log(countDown('2022-2-12 23:00:00'))3.3数组对象
- Array.isArray()[H5新增方法]
1
2
3
4
5
6
7
8
Array.isArray([1, 2, 3]);
// true
Array.isArray({foo: 123});
// false
Array.isArray("foobar");
// false
Array.isArray(undefined);
// false
添加删除数组元素
- push()在数组末尾添加一个或者多个数组元素;push()返回值为新数组长度
- unshift()在数组前边添加一个或者多个数组元素;unshift()返回值为新数组长度
- pop()删除数组的最后一个元素;pop()返回值为删除的元素
- shift()删除数组的第一个元素;shift()返回值为删除的元素
数组排序
方法名 说明 是否修改原数组 reverse() 颠倒数组中元素的顺序,无参数 改变原来的数组,返回新数组 sort() 对数组的元素进行排序 改变原来的数组,返回新数组 1
2
3
4
5
6var arr = [13,4,77,1,7]
arr.sort();//[1,13,4,7,77]
arr.sort(function(a,b){
return a - b;//升序排列
return b - a;//降序排列
})数组索引方法
方法名 说明 返回值 indexOf() 数组中查找给定元素的第一个索引 若存在返回索引号,不存在返回-1 lastIndexOf() 数组中查找给定元素的最后一个索引 若存在返回索引号,不存在返回-1 1
2
3
4
5
6
7
8
9
10
11
12
13
14//数组去重案例
var array = [1,2,33,4,3,1,5,6,7,6]
function unique(array){
var newArray = [];
for (let index = 0; index < array.length; index++) {
var i = newArray.indexOf(array[index])
if(i === -1){
newArray.push(array[index])
}
}
return newArray
}
console.log(unique(array))
其他
方法名 说明 返回值 concat() 连接两个或多个数组,不影响原数组 返回一个新数组 slice() 数组截取 返回被截取的新数组 splice() 数组删除splice(第几个开始,要删除的个数) 返回被删除后的数组,影响原数组 splice()方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。1
2
3
4
5
6
7array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
//start 指定修改的开始位置(从0计数)。如果超出了数组的长度,则从数组末尾开始添加内容;如果是负值,则表示从数组末位开始的第几位(从-1计数,这意味着-n是倒数第n个元素并且等价于array.length-n);如果负数的绝对值大于数组的长度,则表示开始位置为第0位。
//deleteCount 可选 整数,表示要移除的数组元素的个数。如果 deleteCount 大于 start 之后的元素的总数,则从 start 后面的元素都将被删除(含第 start 位)。
//如果 deleteCount 被省略了,或者它的值大于等于array.length - start(也就是说,如果它大于或者等于start之后的所有元素的数量),那么start之后数组的所有元素都会被删除。
//如果 deleteCount 是 0 或者负数,则不移除元素。这种情况下,至少应添加一个新元素。
//item1, item2, ... 可选
//要添加进数组的元素,从start 位置开始。如果不指定,则 splice() 将只删除数组元素。1
2
3
4
5
6
7
8
9
10
11const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// inserts at index 1
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "June"]
months.splice(4, 1, 'May');
// replaces 1 element at index 4
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "May"]3.4字符串对象(基本包装类型)
为了方便操作基本数据类型,JavaScript还提供了三个特殊的引用类型:String、Number和Boolean。
基本包装类型就是把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法。
字符串的不可变:指的是里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间。
字符串中所有的方法,都不会修改字符串本身(字符串是不可变的),操作完成会返回一个新的字符串。
| 方法名 | 说明 | 返回值 |
|---|---|---|
| indexOf(‘要查找的元素’,[起始位置]) | 数组中查找给定元素的第一个索引 | 若存在返回索引号,不存在返回-1 |
| lastIndexOf() | 数组中查找给定元素的最后一个索引 | 若存在返回索引号,不存在返回-1 |
1 | |
根据位置返回字符
| 方法名 | 说明 | 使用 |
|---|---|---|
| charAt(index) | 返回指定位置的字符(index字符串的索引号) | str.charAt() |
| charCodeAt(index) | 获取指定位置处字符的ASCII码 | str.chartCodeAt() |
| str[index] | 获取指定位置处的字符 | HTML5,IE8+支持 |
1 | |
字符串操作方法
| 方法名 | 说明 |
|---|---|
| concat(str1,str2…) | 连接两个或多个字符串,不影响原数组 |
| slice(start,end) | 字符串截取(end处取不到) |
| substr(start,length) | 从start位置开始,lengtn取得个数 |
| substring(start,end) | 字符串截取(end处取不到),不接受负值 |
| replace(‘被替换的字符’,’替换为的字符’) | 替换字符,只会替换第一个字符 |
| split(‘分隔符’) | 字符转换为数组 |
| toUpperCase() | 转换大写 |
| toLowerCase() | 转换小写 |
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!