js

121 阅读1分钟

引用类型和值类型

   所有的基本类型都是值类型
            传递的值
        所有的复杂类型都是引用类型
            传递的地址
<script>
        //  var n1 = 10;
        //  var n2 = n1;
        //  n2 = 3000;
        //  console.log(n1,n2);


        //  var obj1 = {name:"jack"}
        //  var obj2 = obj1;
        //  obj2.name = "rose";
        //  console.log(obj1,obj2);


        //  var obj1 = {name:"jack"}
        //  var obj2 = obj1.name;

        //  obj2 = "rose";
        //  console.log(obj1,obj2);
         

        // function f1(s){
        //     //形参也相当于是局部变量,所以也要开空间
        //     s = 3000;
        // }

        // var n1 = 10;
        // f1(n1);
        // console.log(n1);//10


        // function f2(s){

        //     s.age = 999;
        // }

        // var obj = {name:"kack", age:16}

        // f2(obj)
        // console.log(obj);


        // function f3(s){

        //     s = { name:"rose",age:999 }  //只要有大括号就会开辟新的空间
        // }

        // var obj = {name:"jack", age:16}
        // f3(obj)
        // console.log(obj); //jack 16


        // function f4(s){

        //     s = 999; //只是改s自己空间,而不是它指向的空间  把开始存的地址改为999
        // }
        // var obj = { name:"jack", age:16 };
        // f4(obj);
        // console.log(obj);//jack 16 


        // function f5(s){

        //     s = 999;
        // }
        // var obj = { name:"jack", age:16 }
        // f5(obj.age)
        // console.log(obj.age); //16
        

        function forEach(str){

            str = str + "///"
        }

        var arr = [ 'abc','cba','nba'];
        forEach(arr[0])
        forEach(arr[1])
        forEach(arr[2])

        console.log(arr);//都是打印不加///的
        
         
     </script>

字符串不可改 如果更改了 需要重新用变量名接受一下

浅拷贝

newarr=[...arr]

... 和find方法都是浅拷贝

如果arr是普通类型 那么值不会跟着变 如果是对象或数组就等于是引用,赋值 值会跟着变化

深拷贝

let aNewState=JSON.parse(JSON.stringify(state))

这是深拷贝 不会随着值得变化而变

undefined的产生

1.声明一个变量未赋值

2.想要获取一个对象上不存在的属性或方法

3.一个数组中没有被赋值的元素

ES6

let

let使js发生革命性的变化,让js由函数作用域变为了块级作用域,用let后作用域链不复存在,代码的作用域链以块级为单位

for循环里面 一个用var申明 一个用let申明
var data=[];
    for(var i=0;i<3;i++){
        data[i]=function(){console.log(i);
        }
    }
    data[0]()
    data[1]()
    data[2]()  结果为 3 3 3 

 var data=[];
    for(let i=0;i<3;i++){
        data[i]=function(){console.log(i);
        }
    }
    data[0]()
    data[1]()
    data[2]()  结果为 0 1 2
//如何快速将一个字符串翻转
let sTr="蓝忘机"
sTr=sTr.split('').reverse().join('')
console.log(sTr);

join() 方法用于把数组中的所有元素放入一个字符串。

元素是通过指定的分隔符进行分隔的。
参数	       描述
separator	可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。