JS基础整理

js定义函数的方式(两种)

函数的声明(函数的声明存在函数提升,意思就是在函数声明可以放在调用他的语句之后)

add(1,2) //弹窗显示:3  
function add(x,y){  
  alert(x+y) 
}  

函数表达式(先创建一个匿名函数,然后通过变量赋值,我们知道js中要想使用一个变量必须先给它赋值,函数也不例外,所以在调用前必须赋值,函数的表达式不存在函数提升)

add() //会报错
var add= function(arg0, arg1, arg2) {
   //函数体
}
add(1,2,3)

常用哪几种判断js数据类型的方式
typeof 可以判断j数据类型(“undefined”,“number”,“string”,“symbol”,“boolean”)
判断null时为Obeject,判断数据和object时皆为Object

instanceof用于判断(object,function,Array,Date)
[1,2,3] instanceof Array    //true

什么是闭包

闭包就是指的是能调用其他函数内部变量的函数
常见的闭包

function foo(a) {
    setTimeout(function timer(){
        console.log(a)
    }, 1000)
}
foo(2);

循环和闭包

for(var i = 0; i < 5; i++) {
    setTimeout(() => {
        console.log(i);
    }, i * 1000);
}

分别输出5,5,5,5,5 为什么? 这属于延迟函数 延迟函数的回调会在循环结束时才会执行 当i等于5时条件不在满足 跳出循环 才开始执行settimeout 所以此时的i是等于5的

JS几种数据类型转换

转字符串

toString() null和undefined不可以
var a= true
console.log(a.toString())

string()方法都可以

console.log(string(null))

转数字
Number()//可以把任何值转换为数值,只要字符串中一个不为数字返回都为NaN

            console.log(Number(" 12111 "))
            console.log(Number("154554qwqe")) //NaN

parseInt()//如果字符串第一个是数字就会开始解析,直到遇到不是数字结束,一开始就不是数字则返回NAN

  console.log(parseInt("154654a")) //154654
  console.log(parseInt("a12131321")) //nan

parseFloat(): parseFloat()把字符串转换成浮点数,parseFloat()和parseInt非常相似,不同之处在与parseFloat会解析第一个. 遇到第二个.或者非数字结束如果解析的内容里只有整数,解析成整数。

数组常用的方法

一、split() 和 join() 的区别

'1-2-3'.split('-')  // [1, 2, 3]
[1, 2, 3].join('-') // 1-2-3

二、数组的 pop push unshift shift 分别是什么?

const arr = [10, 20, 30, 40]
 
// pop:删除数组最后一个
const popRes = arr.pop()
console.log(popRes, arr) // 40 [10, 20, 30]
 
// push:数组末尾添加
const pushRes = arr.push(50)
console.log(pushRes, arr) // 5 [10, 20, 30, 40, 50]
 
// unshift:数组头部添加一个或者多个元素
const unshiftRes = arr.unshift(5)
console.log(unshiftRes, arr) // 5 [5, 10, 20, 30, 40]
 
// shift:删除数组头部第一个元素
const shiftRes = arr.shift()
console.log(shiftRes, arr) // 10 [20, 30, 40]

三、slice 与 splice 有何不同

slice 和 splice 都可以截取数组,不同的是 slice 不会改变原数组,而 splice 会改变原数组。

const arr = [10, 20, 30, 40, 50]
 
// slice:截取数组
const arr1 = arr.slice() // [10, 20, 30, 40, 50]
const arr2 = arr.slice(1, 4) // [20, 30, 40]
const arr3 = arr.slice(2) // [20, 30, 40, 50]
const arr4 = arr.slice(-2) // [40, 50]
 
// splice:插入,删除替换数组
const spliceRes = arr.splice(1, 2, 'a', 'b', 'c') // [20, 30] [10, "a", "b", "c", 40, 50]
const spliceRes1 = arr.splice(1, 2) // [20, 30] [10, 40, 50] 
const spliceRes2 = arr.splice(1, 0, 'a', 'b', 'c') // [] [10, "a", "b", "c", 20, 30, 40, 50] 
console.log(spliceRes, arr) 

四、数组遍历

const arr = [10, 20, 30, 40]
 
// concat
const arr1 = arr.concat([50, 60, 70])
console.log(arr, arr1)  // [10, 20, 30, 40] [10, 20, 30, 40, 50, 60, 70]
 
// map
const arr2 = arr.map(num => num * 10)
console.log(arr, arr2)  // [10, 20, 30, 40] [100, 200, 300, 400]
 
// filter
const arr3 = arr.filter(num => num > 25) 
console.log(arr, arr3) // [10, 20, 30, 40] [30, 40]
 
// slice
const arr4= arr.slice()
console.log(arr, arr3) // [10, 20, 30, 40] [10, 20, 30, 40]
可以看出来,数组的 API:concat、map、filter、slice 不会改变原数组,且返回一个数组,被称为纯函数。

非纯函数: pop push shift unshift forEach some every reduce

五、数组内容反转

var arr = [1,2,3];
var arr1 = arr.reverse();
console.log(arr, arr1);  // [3, 2, 1] [3, 2, 1]

六、数组排序

var arrs = [1,3,5,2,4];
arrs.sort();
console.log(arrs);  // [1, 2, 3, 4, 5]
// 排序里面可以添加函数,来决定排序的前后
arrs.sort(function (a,b){
  return a - b;
});
console.log(arrs);  // [1, 2, 3, 4, 5]

补充:

const res = [10, 20, 30].map(parseInt)
console.log(res) // [10, NaN, NaN]

相当于:

[10, 20, 30].map((num, index) => {
    return parseInt(num, index)
})
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值