【JavaScript知识点】预解析、作用域、数据类型、数组常用方法、字符串常用方法
JS知识点
- 1.预解析
- 2.作用域:一个变量可以生效的范围,这个变量的使用范围就是作用域
- 3.作用域访问规则
- 4.存储空间分成两种:栈和堆
- 5.数据类型分为:基本数据类型和复杂数据类型
- 6.冒泡排序和选择排序
- 7.数组常用方法
- 8.字符串常用方法
- 9.json 是一种轻量级的数据交换格式,把字符串转换成公用的模式
- 10.ES6 中引入了模板字符串
- 11.数字常用方法
- 12.将日期字符串格式化成指定内容
1.预解析
因为是在所有代码执行之前进行解释,需要解释的内容有两个:
- 声明式函数
- 在内存中先声明有一个变量名是函数名,并且这个名字代表的内容是一个函数
var
关键字- 在内存中先声明有一个变量名
2.作用域:一个变量可以生效的范围,这个变量的使用范围就是作用域
-
局部作用域
- 局部作用域就是在全局作用域下面有开辟出来的一个相对小一些的作用域
- 在局部作用域中定义的变量只能在这个局部作用域内部使用
- 在
JS
中只有函数能生成一个局部作用域,别的都不行 - 每一个函数,都是一个局部作用域
-
全局作用域
- 全局作用域是最大的作用域
- 在全局作用域中定义的变量可以在任何地方使用
- 页面打开的时候,浏览器会自动给我们生成一个全局作用域
window
- 这个作用域会一直存在,直到页面关闭就销毁了
3.作用域访问规则
- 首先,在自己的作用域内部查找,如果有,就直接拿来使用
- 作用域的查找机制只能是向上找,不能向下找
4.存储空间分成两种:栈和堆
- 栈: 主要存储基本数据类型的内容
- 堆: 主要存储复杂数据类型的内容
- 复杂数据类型是地址之间的比较
var obj = { name: 'Jack' }
var obj2 = { name: 'Jack' }
console.log(obj == obj2) // false
- 因为我们创建了两个对象,那么就会在 堆空间 里面开辟两个存储空间存储数据(两个地址)
- 虽然存储的内容是一样的,那么也是两个存储空间,两个地址
- 复杂数据类型之间就是地址的比较,所以
obj
和obj2
两个变量的地址不一样 - 所以我们得到的就是
false
5.数据类型分为:基本数据类型和复杂数据类型
- 基本数据类型:
number
/string
/boolean
/undefined
/null
- 复杂数据类型:
object
/function
/array
6.冒泡排序和选择排序
for (var j = 0; j < arr.length-1; j++) {
for (var i = 0; i < arr.length-j-1; i++) {
// 判断,如果数组中的当前一个比后一个大,那么两个交换一下位置
if (arr[i] > arr[i + 1]) {
var tmp = arr[i]
arr[i] = arr[i + 1]
arr[i + 1] = tmp
}
}
}
选择排序
for (var j = 0; j < arr.length - 1; j++) {
var minIndex = j
for (var i = j + 1; i < arr.length; i++) {
if (arr[i] < arr[minIndex]) {
minIndex = i
}
}
if (minIndex !== j) {
var tmp = arr[minIndex]
arr[minIndex] = arr[j]
arr[j] = tmp
}
}
7.数组常用方法
- push-是用来在数组的末尾追加一个元素
var arr = [1, 2, 3]
var res=arr.push(4)//会改变原始数组
console.log(arr) // [1, 2, 3, 4]
console.log(res) //4
- pop-是用来删除数组末尾的一个元素
var arr = [1, 2, 3]
var res=arr.pop()//会改变原始数组
console.log(arr) // [1, 2]
console.loh(res)
- unshift-是在数组的最前面添加一个元素
var arr = [1, 2, 3]
arr.unshift(4)//会改变原始数组
console.log(arr) // [4, 1, 2, 3]
- shift-是删除数组最前面的一个元素
var arr = [1, 2, 3]
arr.shift()//会改变原始数组
console.log(arr) // [2, 3]
- splice(从哪一个索引位置开始,截取多少个,替换的新元素)-是截取数组中的某些内容,按照数组的索引来截取
var arr = [1, 2, 3, 4, 5]
arr.splice(1, 2)//会改变原始数组
console.log(arr) // [1, 4, 5]
- reverse-是用来反转数组使用的
var arr = [1, 2, 3]
arr.reverse()
console.log(arr) // [3, 2, 1]
- sort-是用来给数组排序的
var arr = [2, 3, 1]
arr.sort()//会改变原始数组
console.log(arr) // [1, 2, 3]
- concat-是把多个数组进行拼接
var arr = [1, 2, 3]
var newArr = arr.concat([4, 5, 6])//不会改变原始数组
console.log(arr) // [1, 2, 3]
console.log(newArr) // [1, 2, 3, 4, 5, 6]
- join-是把数组里面的每一项内容链接起来,变成一个字符串
var arr = [1, 2, 3]
var str = arr.join(‘-’) //不会改变原始数组
console.log(arr) // [1, 2, 3]
console.log(str) // 1-2-3
- indexOf-用来找到数组中某一项的索引
var arr = [1, 2, 3, 4, 5]
var index = arr.indexOf(3)
console.log(index) // 3 的下标为 2
如果你要找的内容在数组中没有,那么就会返回 -1
- forEach-是用来遍历数组的
var arr = [1, 2, 3]
arr.forEach(function (item, index, arr) {
// item 就是数组中的每一项
// index 就是数组的索引
// arr 就是原始数组
console.log('数组的第 ’ + index + ’ 项的值是 ’ + item + ‘,原始数组是’, arr)
})
数组的长度是多少,这个函数就会执行多少回
- map-和 forEach 类似,只不过可以对数组中的每一项进行操作,返回一个新的数组
var arr = [1, 2, 3]
// 使用 map 遍历数组
var newArr = arr.map(function (item, index, arr) {
// item 就是数组中的每一项
// index 就是数组的索引
// arr 就是原始数组
return item + 10
})
console.log(newArr) // [11, 12, 13]
- filter-把原始数组中满足条件的筛选出来,组成一个新的数组返回
var arr = [1, 2, 3]
var newArr = arr.filter(function (item, index, arr) {
// item 就是数组中的每一项
// index 就是数组的索引
// arr 就是原始数组
return item > 1
})
console.log(newArr) // [2, 3]
- reduce-叠加
var arr=[1,2,3,4,5]
var arr2=arr.reduce(function(prev,item){
return prev+item//prev 是上一次的 return 值
},0)//初始值为 0
console.log(arr2)
8.字符串常用方法
- charAt:返回索引对应的字符
var str = “Jack”;
var index = str.charAt(2);
console.log(index); // c
- charCodeAt:就是返回对应索引位置的
unicode
编码
var str = “Jack”;
var index = str.charCodeAt(0);
console.log(index); // 74
- toUpperCase() toLowerCase()转换大小写
var str = hello;
var upper = str.toUpperCase();
console.log(upper); // HELLO
var lower = upper.toLowerCase();
console.log(lower); // hello
- substr(开始索引,长度) substring(开始索引,结束索引) slice(开始索引,结束索引)
- replace 替换(正则表达式):替换某个字符 str.replace(“a”,“*”)
- split 分割:str.split(“|”)
- indexOf(lastIndexOf 从后面查)查找字符的下标
var str = “Jack”;
var index = str.indexOf(“J”);
console.log(index); // 0
- concat 连接字符串
- trim 去掉首尾空格
9.json 是一种轻量级的数据交换格式,把字符串转换成公用的模式
- JSON 和 JS 对象互转
- 要实现从 JSON 字符串转换为 JS 对象,使用 JSON.parse() 方法:
var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'}
- 要实现从 JS 对象转换为 JSON 字符串,使用 JSON.stringify() 方法:
var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'
10.ES6 中引入了模板字符串
- 要创造一个模板字符串,只需要使用反引号``将字符串包起来,模板字符串中的变量用${变量名}替代即可
var a = 'o,';var b = 'd!'
console.log (`Hell${a}worl${b}`);
- 多行字符串:在模板字符串内,换行和空格是会保存并展示出来的
var a = 'o,';var b = 'd!'
console.log(`Hell${a}worl${b}`);
- 调用函数
function string(){
return "Hello!";
}
console.log(`${string()} world!`);
11.数字常用方法
Math.random()
这个方法是用来生成一个0 ~ 1
之间的随机数Math.round()
是将一个小数 四舍五入 变成一个整数Math.abs()
是返回一个数字的 绝对值Math.ceil()
是将一个小数 向上取整 得到的整数Math.floor()
是将一个小数 向下取整 的到的整数Math.max()
得到的是你传入的几个数字之中 最大 的那个数字Math.min()
得到的是你传入的几个数字之中 最小 的那个数字Math.PI
得到的是π
的值,也就是3.1415936...
12.将日期字符串格式化成指定内容
getFullYear()
方式是得到指定字符串中的哪一年getMonth()
方法是得到指定字符串中的哪一个月份getDate()
方法是得到指定字符串中的哪一天getHours()
方法是得到指定字符串中的哪小时getMinutes()
方法是得到指定字符串中的哪分钟getSeconds()
方法是得到指定字符串中的哪秒钟getDay()
方法是得到指定字符串当前日期是一周中的第几天(周日是 0,周六是 6)getTime()
方法是得到执行时间到格林威治时间
的毫秒数(时间戳)
来源:千锋kerwin前端JS视频