JS学习-8.2日学习内容
全局变量
如果在函数内部没有声明,直接赋值的函数也属于全局变量。
作用域链
内部函数访问外部函数的变量,采取的是链式查找的方式来决定取那个值这种结构我们称为作用域链(就近原则)。
预解析
1.js引擎运行js分为两步:预解析 代码执行
(1)预解析:js引擎会把js里面所有的var还有function提升到当前作用域的最前边。
(2)执行代码:按照代码书写的顺序从上往下执行。
2.预解析分为变量预解析(变量提升) 和函数预解析(函数提升)
(1)变量提升就是把所有的变量声明提升到当前的作用域最前面,不提升赋值操作。
(2)函数提升就是把所有的函数声明提升到当前作用域的最前面,不调用函数。
对象
JS中的对象,是一组无序的相关属性和方法的集合,所有的事物都是对象,是由属性和方法组成的。但是现实对象只有宝宝一个人。
●属性:事物的特征,在对象中用属性来表示(常用名词)
●方法:事物的行为,在对象中用方法来表示(常用动词)
- 利用字面量创建对象{},var obj={};
//创建对象
varobj={
uname :'wwl',
age: 19,
sex:'女',
sayHi: function() {
console.1og( 'HAK臭猪~' );
}
}
//调用对象
console.log(obj.uname);//对象名.属性名.
console .1og(obj['age']);//对象名['属性名']
obj.sayHi(); //调用对象的方法sayHi对象名.方法名() 千 万别忘记添加小括号
1.里面的属性或者方法我们采取键值对的形式,键 属性名: 值 属性值。
2.多个属性或者方法中间用逗号隔开。
3.方法冒号后面跟的是一个匿名函数。
- 利用new Object创建对象,var obj=new Object();
ar obj=new Object();
obj.uname = 'wwl' ;
obj.age = 19;
obj.sex ='女';
obj.sayHi=function(){
console.1og('HAK臭猪~' );
}
//调用对象
console . log(obj .uname) ;
console .1og(obj[ 'sex']);
obj . sayHi() ;
1.我们是利用等号=赋值的方法添加对象的属性和方法。
2.每个属性和方法之间用分号结束。
构造函数创建对象
构造函数: 是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与new运算符一起使用。我们可以把对象中一些公共的属性和方法抽取出来 ,然后封装到这个函数里面。
function Star(uname, age, sex) {
this.name = uname ;
this.age = age;
this.sex = sex;
this.action= function(action) {
console .1og(action);
}
var Baobao = nIlew Star ( 'Baobao',19, '女'); //调用函数返回的是一个对象
console . log(1dh. name) ;
console .1og(1dh['sex']);
ldh.sing( 'Kiss-Chouzhu');
var Chouzhu= nIlew Star ( 'Chouzhu',20, '男'); //调用函数返回的是一个对象
console . log(1dh. name) ;
console .1og(1dh['sex']);
ldh.sing( 'Hug-Baobao');
(1)构造函数名字首字母要大写。
(2)我们构造函数不需要return就可以返回结果。
(3)我们调用构造函数必须使用new 。
(4)我们只要new Star() 调用函数就创建一 个对象。
(5)我们的属性和方法前面必须添加this。
new关键字的执行过程
- new 构造函数可以在内存中创建了一个空的对象。
- this就会指向刚才创建的空对象。
- 执行构造函数里面的代码给这个空对象添加属性和方法。
- 返回这个对象。
遍历对象
利用for in 遍历,语法为for(变量 in 对象){}。
在for in 里的变量我们喜欢写k或者key。
for(var k in obj){
console.log(k);//k变量输出得到属性名
console.log(obj[k]);//obj[k]得到的是属性值
时间计算
d = parseInt(总秒数/ 60/60 /24);//计算天数
h = parseInt(总秒数/ 60/60 %24)//计算小时
m = parseInt(总秒数 /60 %60 );//计算分数
s = parseInt(总秒数%60);//计算当前秒数
数组的检测
(1)instanceof 运算符来检测是否为数组,返回值为true或者false。
var arr=[];
var obj={};
console.log(arr instanceof Array);//true
console.log(obj instanceof Array);//false
(2)Array.isArray(参数);
console.log(Array.isArray(arr));//true
console.log(Array.isArray(obj));//false
添加数组元素
方法名 | 说明 | 返回值 |
---|---|---|
push(参数1…) | 末尾添加一个或多个元素,注意修改原数组 | 并返回新的长度 |
pop() | 删除数组最后一个元素, 把数组长度减1,无参数、修改原数组 | 返回它删除的元素的值 |
unshift(参数1…) | 向数组的开头添加一 个或更多元素,注意修改原数组 | 并返回新的长度 |
shift() | 删除数组的第一个元素, 数组长度减1无参数、修改原数组 | 并返回第一个元素的值 |
var arr=[1,2,3];
console.log(arr.push(4,'pink'));//结尾添加元素
console.log(arr.unshift(4,'pink'));//开头添加元素
console.log(arr.pop());//结尾删除元素
console.log(arr.shift());//开头删除元素
数组排序
方法名 | 说明 | 是否修改原数组 |
---|---|---|
reverse() | 颠倒数组中元素的顺序,无参数 | 该方法会改变原来的数组返回新数组 |
sort() | 对数组的元素进行排序 | 该方法会改变原来的数组返回新数组 |
//翻转数组
var arr=['pink','red','blue'];
arr.reverse();
console.log(arr);
//数组排序(冒泡)
var arr1=[13,4,77,1,7];
arr1.sort(function(a,b){
return a-b;//重点
});
console.log(arr1);
数组索引方法
方法名 | 说明 | 返回值 |
---|---|---|
indexOf() | 数组中查找给定元素的第一个索引 | 如果存在返回索引号如果不存在,则返回-1。 |
lastlndexOf() | 在数组中的最后一个的索引 | 如果存在返回索引号如果不存在,则返回-1。 |
去重案例:
function unique(arr){
var newArr=[];
for(var i=0;i<arr.length;i++){
if(newArr.indexOf(arr[i])===-1)
newArr.push(arr[i]);
}
return newArr;
}
var demo=unique(['a','b','v','c','d','a','b']);
console.log(demo);
数组转换为字符串
方法名 | 说明 | 返回值 |
---|---|---|
toString() | 把数组转换成字符串,逗号分隔每一项 | 返回一个字符串 |
join(分隔符) | 方法用于把数组中的所有元素转换为一个字符串。 | 返回一个字符串 |
concat() | 连接两个或多个数组不影响原数组 | 返回一个新的数组 |
slice() | 数组截取slice(begin, end) | 返回被截取项目的新数组 |
splice() | 数组删除splice(第几个开始,要删除个数) | 返回被删除项目的新数组注意,这个会影响原数组 |
字符串中出现o的位置的案例:
var str="abcsdwodasfsafofdsfnpo";
var index=str.indexOf('o');
while(index!==-1){
console.log(index);
index=str.indexOf('o',index+1);
}
根据位置返回字符
方法名 | 说明 | 使用 |
---|---|---|
charAt(index) | 返回指定位置的字符(index字符串的索引号) | str.charAt(0) |
charCodeAt(index) | 获取指定位置处字符的ASCII码(index索引号) | str.charCodeAt(O) |
str[index] | 获取指定位置处字符 | HTML5, IE8+支持 和charAt()等效 |