JS基础笔记06

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。

猜你喜欢

转载自blog.csdn.net/kemprong/article/details/80147429