javaScript两大基本数据类型
1:基本数据类型
number string boolean null undefined
2:应用数据类型
数组、objectMathDate正则表达式、window、dom
con:
动态添加属性
基本数据类型不能添加动态属性
引用数据类型可以动态添加属性
传参:
假如传入的实参时基本类型,实际上传的值的拷贝
假如传入的实参时引用类型,实际上传的值的地址
作用域:有效范围
全局作用域 & 全局变量
函数之外都是全局的,包括代码块内部声明
局部作用域 & 局部变量
函数内部定义的变量
ES6:块级作用域
con:
建议变量使用局部变量
隐式的全局变量:y = 2; //不用var 声明
字符串
字符串API整理:
var str = 'hello';
concat():
var res = str.concat('wold','!!!');
substr():
var url = "http://www.baidu.com?username=admin&psw=123456";
var idx = url.indexOf('?');
var res1 = url.substr(idx+1); //从idx+1处开始
var res1 = url.suubstr(idx+1 , length)
//开始序号-结束序号,且不包含末尾序号位置
var res1 = url.slice(start,end);
//substring:开始序号-结束序号,且不包含末尾序号位置,并且支持:start>end,表示截取范围
var res1 = url.substring(start,end);
//区别
slicesubstringsubstr(start):默认都是从start到末尾
slice(负数):表示从末尾开始取值
replace():网站内容和谐
//replace()只替换一个
var res = str.replace(source,target);
//[1]
var index=0;
index = str.indexOf(source);
while(index!==-1){
}
//[2]
while(res =str.replace(source,target) !== null){
console.log(res);
str = res;
}
//replaceAll()
split():字符串分割
字符串无reverse();数组有!
String.fromCharCode() --相反-- str.charCodeAt()
//
String.prototype.myReplace = function(f, e) {
var reg = new RegExp(f, "g");
return this.replace(reg, e);
}
var newStr = str.myReplace('tmd', '');
console.log(newStr);
Math:与其他全局对象不同的是,
Math
不是一个构造器。Math
的所有属性与方法都是静态的。属性:PI 、 E、sqrt1_2
方法: abs()
ceil()
floor()
round()
random():[0,1):返回一个 0 到 1 之间的伪随机数。
Date
var now = new Date();
now.getFullYear()
now.getMonth()---特殊从0开始
now.getDate()
now.getDay()---星期几,并且从星期日开始
now.getHour()
now.getMinute()
now.getSeconds()
now.getMilliseconds()
---1970.1.1 --->指定时间
now.getTime()---总毫秒数 === now.valueOf()
//h5新增 Date.now() ----兼容性额外难题
函数
函数:具有一定功能的代码块
-复用
-内置函数&自定义
--建议形参小于5个
---ES6支持给默认值
---不支持返回多个基本类型
--函数无返回值,返回值为 undefined
---arguments不是数组,但有:arguments.length()
-funtion定义的函数,可以先定义后调用,也可以先调用后定义
-匿名函数——没有名字的函数,函数表达式必须先定义后调用
JS代码执行过程:
1 预解析
2 执行
数组
数组常用API:
push() unshift()
pop() shift()
splice()
slice()
indexOf() lastIndexOf()
forEach() 高阶函数——函数的参数是一个函数或者返回值是一个函数
arr.forEach(function(item,index,array){
//item: 数组每个元素
//index:数组元素索引
});
//明白一点:函数也是对象!——所以不要被不熟悉所吓倒,即一切反动派都是纸老虎!
some every map filter reduce sort
concat join reverse
总结案例:
1:数组去重
(思路1:判断原数组内是否重复)indexOf() === lastIndexOf()
(思路2:判断新数组内是否重复)
2: 数组自动添加(弱类型)
var newArr = new Array();
newArr[newArr.length] = 1;
//添加不限制个数
// arr.push()
// arr.unshift()
// arr.pop()
// arr.shift()
// 1.从角标pos位置处删除mount个元素
// arr.splice(pos,mount)
// 2.从角标pos处插入元素ele1
// ex: arr.splice(pos,0,ele1);
// 替换 角标pso位置处的n个元素
// ex: arr.splice(pos,mout_n,ele1,ele2,...,elen)
//arr.slice(start,end)
//arr.join() //把数组的元素用指定的符号拼接为一个大的字符串
// 不传参默认以逗号连接
// arr.join("-");
//concat()
//reverse() //逆序
高阶应用:
Arguments 不是数组类型,而是对象。【所有的实参都在这个对象上】
arguments.length(形参) &&& 函数.length(实参)
arguments.callee : 获取对应函数
-函数无返回值,获取变量为 undefined
预解析:
function定义的函数,可以先定义后调用,也可以先调用后定义
匿名函数
将函数或者变量的声明提升,赋值并不提升
==============
数组自增:弱类型
arr[arr.length] = temp;
高阶函数:函数的参数是一个函数或者返回值是一个函数
//遍历
arr.forEach(function(item,index,arr){
//实现本质:对数组遍历调用函数
});
//筛选:判断是否有满足条件的元素
//找到第一个满足条件,则终止循环,返回true;找不到,则返回false
//返回值为布尔值
var bool = arr.some(function(item,index,arr){
return item>60;
});
//filter
//把满足条件的筛选出来,放到新的数组中
//返回值为数组
var newArr = arr.filter(function(item,index,array){
return item%2===0;
});
//every
//判断数组元素是否都满足条件
//数组所有元素都满足条件,返回true;假如碰到第一个不满足的,终止循环,返回false
var flag = arr.every(function(item,index,arr){
return item>60;
});
//map
//对元素进行遍历(迭代处理)
//返回:根据原数组产生长度一样的新数组----新数组的每一个元素由原数组对应的元素带入函数参数后的返回值
var newArr3 = arr.map(function(item,index,arr){
return item+1;
});
//reduce
//function的参数1:
//参数1:表示累计值默认回去数组的第一个值,下次循环会取到上一次的值
//参数2:表示当前的值,第一次会取数组第二个值
//参数3:表示当前值对应的索引
//参数4:表示原数组
//参数2: 设定start初始值
//返回值:最后一个元素带入函数之后的返回值
var sum = arr.reduce(function(start,item,index,arr){
return start+item;
});
var sum = arr.reduce(function(start,item,index,arr){
return start+item;
},0);
var sum = arr.reduce(function(start,item,index,arr){
return start+item;
},3);
//拼接数组,返回新数组
var res = arr.concat(arr1,arr2,arr3...)
//返回字符串,将元素以 : 连接
var str = arr.join(':')
//本质:更改数组结构,返回相应的地址
//逆序,并且改变原数组结构
var newArr = arr.reverse()
//排序,返回值与原数组均改变结构
//sort:默认是按字符串比较,并且空的默认更小
//
var res = arr.sort()
var res = arr.sort(function(a,b){
return a-b; //升序
return b-a; //降序
});
alert("hello"); //弹出警告框
prompt("input"); //弹出输入框