JS基础笔记06
变量都是存在栈空间里面的,函数调用分两步,首先开辟一块栈空间创建形参变量,并把实参值传给形参,值类型传递时,形参怎么变不会影响实参(若要改变实参需要用返回值重新覆盖),值类型直接就存在在栈空间,所以在形参复制实参栈空间的时候直接就把值复制了一份—————
————但是!对于复杂数据类型,真实的数据存在堆空间(关键字new,做了四件事,1.开辟堆空间 2.创建对象实例 3.调用构造函数 4.返回对空间地址),其地址存放在栈空间,所以在复杂数据类型进行实参形参传递时,实际上是把实参的地址复制了一份给形参,两者指向同一个数据,运用形参修改实际数据时候,实参对应的数值同步发生改变。
function test(insideNum){
insideNum = 100;
console.log(insideNum);
}
var outNum = 31;
test(outNum);
console.log(outNum);
// 先返回100 ,再返回31.
function change(objB){
objB.age = 100;
cosnole.log(objB.age);
}
var objA = new Object();
objA.age = 27;
change (objA);
cosnole.log(objA.age);
//均返回100
对象字面量创建方式:
var Obj = {
//键 : 值,
name : kemp ,
display : function (){
console.log(this.name);
},
//……
};
可以为所有的复杂数据类型添加属性
工厂函数创建对象:(了解,多用后面的构造函数进行对象创建)
function creatStu(stuName , stuAge , stuSex){
var stuObj = new Object();
stuObj.name = stuName;
stuObj.age = stuAge;
stuObj.sex = stuSex;
stuObj.getInfo = function(){
return '我的名字叫【' + this.name + '】,今年已经【' + this.age + '】岁了,性别【' + this.sex + '】';
}
return stuObj;
}
创建对象时:
var stu01 = creatStu('小白' ,28 , true);
……
通过[ ]访问对象属性:
对象实例['属性名']
如stu['name'];
可以传入想访问的属性名,函数属性为:
stu['fun']();
这种方式常用来动态创建对象属性~
调用Date对象:
var dateObj = new Date();
直接通过对象.成员调用的称为静态对象,如Math.PI
如果使用for in 循环遍历一个Object对象实例,遍历的是属性名
for(var i in stuObj){
var str = i + '=' + stuObj[i];
}
如此即可实现遍历过程同时显示属性和属性值。
for in 遍历数组的时候注意数组中不要包含自己定义的元素,否则会打出自己定义的属性。
删除属性:
delete 实例.属性。
对象实例 instanceof 实例类型
会以布尔值的方式返回是否是某个复杂数据类型。
构造函数方式创建对象:
注意构造函数首字母大写命名规范。
function CreatStu(stuName , stuAge , stuSex){
this.age = stuName;
this.age = stuAge;
this.sex = stuSex;
this.getInfo = function(){
return '我的名字叫【' + this.name + '】,今年已经【' + this.age + '】岁了,性别【' + this.sex + '】';
}
}
调用:
var stuObj01 = new CreatStu('hha',23, true);
其他字符串方法:
array.reverse();//翻转数组
array.tostring();//返回字符串形式的数组
array.indexOf(元素 , 开始位置);//查找一个元素在数组中的位置,若没有返回-1,使用时如果查找数组中所有的元素,需要在循环时,每查到一个,下次循环从 i + 1 的位置开始找。
var arrIndex = [];
var index = -1;
do{
index = arr.indexOf('a' , index + 1);
if(index > -1){
arrIndex.push(index);
}
else{
break;
}
}while(true);
返回所有’a’的位置。
array.lastIndexOf(元素 , 开始位置);array.slice(start, end)截取一个新数组,从哪截到哪
清空数组:
array = [];去掉字符串两边的空格: 字符串.trim();
字符串.replace(‘要替换的’,’替换为’);注意是有返回的。分割字符串:
str.split(‘分隔符’);也是有返回值的。this全局作用域:
整个窗体也是对象,window,就是全局作用域。
this代指的就是window。
页面中所有的变量、函数等全属于window,即window就是全局作用域。整个页面就是window对象,在window里面直接定义的对象相当于省略了window的this。
构造函数若直接调用(不用var),实际上是给window进行了构造。
- 逻辑或参与运算 || :
var test = ”;
var res = test || ‘two’;
如果test 为null undefined 0 等可转换为布尔值false的内容,则返回test的值给res ,否则返回’two’给res。