JavaScript基础部分
一、JavaScript的组成三部分
1、ECMAScript ( JS语法 )
2、DOM( 页面文档对象模型 )
3、BOM( 浏览器对象模型 )
二、JS的三种写法
1、行内嵌入式
< ... onlink = "alert ( ... )" />
2、页面头部
<head>
...
...
<script> ... </script>
</head>
3、JS代码页
<script src = " xxx.js "> </script>
三、常见弹出框
1、弹出警示框
alert( 对象 );
2、控制台打印输出信息
console.log( 对象 );
3、弹出输入框,可以输入
prompt( '显示内容' );(这里输出的值默认是String)
四、判断是否是数字类型
inNaN()
返回值为 true ,非
false , 是
五、undefined 和 null
undefined 表示变量未赋值
null 表示值为空 (空值本身也是一种赋值)
六、typeof
typeof + 对象:检测数据类型
七、数据转换
1、转为字符型
① xxx.toString
② String( … ); 强制转换
③ + 字符串
2、转为数值型
① parseInt( String ) 把String转为整数
② parseFloat( String) 把String转为浮点数
③ Number(); 强制转换
④ js隐式转换( - * / )
八、函数(方法)调用
function xxx(...){
...
...
(且这里的局部变量,在外面也可以使用(这一点跟Java不一样))
...
}
xxx( ... );
九、arguments
1、当不知道具体参数数量是,可以用arguments获取;
2、这个函数是内置的,用于存储所有参数;
3、(伪数组)类似于数组,可有 length、遍历 等方法,与数组构造相似,但是不可以有 push()、pop() 等方法。
十、预解析
js 引擎运行 js 分两步:预解析 和 代码执行
① 预解析:在所有作用域内,把所有的变量声明和函数声明都提到最前面
② 代码执行:从上往下
十一、作用域
作用域内所有赋值独立,每个作用域内都会被声明提前
如果局部中有变量没有声明,直接赋值,那这个变量相当于全局变量
十二、遍历对象
1、for循环
for(变量 in 对象){
console.log(变量); => 遍历输出属性名
console.log(对象[变量]); => 遍历输出属性值
}
2、foreach循环
let arr1 = [1, 2, 3, 4, 5]
arr1.forEach((value, index, array) => {
console.log(value); //遍历输出每一个值
console.log(index); //遍历输出每一个索引号
console.log(array); //遍历输出该数组
});
十三、格式日期
① new Date()对象
getFullYear() =>年
getmonth() =>月
getDate() =>天(其他对象的用命名用Dates,不可用Date)
getDay() =>星期 5
// 星期一般的形式,需要以下遍历方式,对应输出
var arr = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
十四、总毫秒数(时间戳)
Date.now() => 结果是number数字类型
var xx = +new Date()(最常用)
十五、声明变量的三种关键字
① var 一般用于全局变量
② let 局部变量,可改赋值,更为严格
③ const 不可改赋值
十六、数组
1、检测是否为数组
① arr instanceof Array ==> true / false
② Array.isArray(arr)(新版才有,功能更全)
2、reduce()叠加器方法
let result = arr.reduce((callback,initiaValue) => {
......循环方法体......
},0)
let 结果变量 = 数组.reduce((临时接收结果的新变量,用于索引的变量) => {
......循环方法体......
},结果数值变量的初始值,如果不写则默认初始值为数组第一个数)
1.reduce(callback,initiaValue)会传入两个变量,回调函数(callback)和初始值(initiaValue)。
2.假设回调函数有4个传入参数,prev和next(可能还有 index和array)。 Prev和next是你必须要有的。(index: 当前元素的索引;array:当前元素所属的数组对象)
3.当没有传入初始值时,prev是从数组中第一个元素开始的,next数组是第二个元素。
4.但是当传入初始值(initiaValue)后,第一个prev将是initivalValue,next将是数组中的第一个元素。
简单用法:
let arr1 = [1,2,3,4,5]
//求和
let sum=arr1.reduce((pre,item)=>{
return pre + item
},0)
console.log('sum=',sum); //15
//求积
let mul = arr1.reduce((x,y)=>{
return x*y
})
console.log('mul=',mul) //120
//数组中元素出现的次数
let name=[1,5,2,1,6,5,1,2,4,2,4,3,5,6];
let nameNum = name.reduce((pre,item)=>{
if(item in pre){
pre[item] ++
}else{
pre[item]=1
}
return pre
},{})
console.log('次数',nameNum)
//{1: 3, 2: 3, 3: 1, 4: 2, 5: 3, 6: 2}
//去重
let name=[1,5,2,1,6,5,1,2,4,2,4,3,5,6];
let newArr=name.reduce((pre,item)=>{
if(!pre.includes(item)){
return pre.concat(item)
}else{
return pre
}
},[])
console.log('newArr',newArr) //[1,5,2,6,4,3]
//将二维数组转化为一维数组
let cat=[[1,2],[2,3],[3,4],[4,5]];
let newCat=cat.reduce((pre,item)=>{
return pre.concat(item)
},[])
console.log(‘二维’,newCat) //[1,2,2,3,3,4,4,5]
//多维数组转化为一维
let drunk=[[0,1],[1,2],[1,[1,2,3,4],5]];
let newDrunk=function(drunk){
return drunk.reduce((pre,item)=>pre.concat(Array.isArray(item)?newDrunk(item):item),[])
}
console.log(‘多维’,newDrunk(drunk)) //[0,1,1,2,1,1,2,3,4,5]
3、concat()数组合并方法
① 使数组头尾相连,产生一个新的数组,不会改变原来的数组,且数组维度不变
arr1.concat(arr2);
② 使数组合并为一个数组,会相对原来的数组降维
arr1.concat。apply(arr2);
4、indexOf()检测方法
返回首次出现 ‘abc’ 的位置,没有则出现 -1
arr.indexOf('abc');
5、push()添加元素方法
在数组末尾添加元素
arr.push('a','b',3,...,100);
6、slice()截取数组方法
var a = [1,2,3];
//从索引1开始截取到结束。
console.log(a.slice(1)); >>[2, 3]
//从索引1可以截取到索引2之间的值
console.log(a.slice(1,2)); >>[2]
//从末尾-1索引截取一个值
console.log(a.slice(-1)); >>[3]
//从索引0开始截取到末尾索引-1的值
console.log(a.slice(0,-1)); >>[1,2]
十七、字符串
1、substr()截取字符串
从0开始截取2个长度的字符,生成新的字符串
var str = 'abcd';
str.substr(0,2); ==> 'ab'
2、replace()替换方法
替换里面的某一个元素==(方法只替换字符串中的第一个元素)==
var str3 = "javascript is a good script language";
var str4 = str3.replace('a', 'A');
var str5 = str3.replace(/a/g, "A");
console.log(str4);
console.log(str5);
结果如下: