美文网首页
js的严格模式

js的严格模式

作者: 无崖老师 | 来源:发表于2020-03-27 21:59 被阅读0次

    严格模式[理解]

    概念

    2011年ECMAscript5发布
    除了正常运行模式,ECMAscript5添加了第二种运行模式:“严格模式”(strict mode)。顾名思义,这种模式是的Javascript在更严格的条件下运行。

    严格模式的作用

    1.消除了JS语法的一些不合理、不严谨之处,减少一些怪异行为;
    2.消除代码运行的一些不安全之处,保证代码运行的安全;
    3.提高编译器效率,增加运行速度;
    4.为未来新版本的JS做好铺垫

    严格模式体现了JS更合理,更安全,更严谨的发展方向,包括IE10在内的主流浏览器都已经支持它了

    注意:同样的代码,在“严格模式”中,可能会有不一样的运行结果,一些在“正常模式”下可以正常运行的语句,在“严格模式”下将不能运行,掌握这些内容,有助于更细致深入的理解JS,让你编程一个更好的程序员

    严格模式的调用

    进入严格模式:  "use strict" ;
    
    注意:老的浏览器会直接忽略.
    

    严格模式作用范围

    整个脚本文件

    将 "use strict" 放在脚本文件的第一行,则整个脚本文件都将以“严格模式”运行,
    如果这行语句不在第一行,则无效,整个脚本以“正常模式”运行。
    如果不同模式的代码文件合并成一个文件,这一点需要特别注意

    1全局变量声明时,必须加关键字(var)

    例:在非严格和严格模式下输出未使用var声明的变量a

    非严格:    
            a = 10;
            console.log(a);
            
    严格:  "use strict";
            a = 10;
            console.log(a);
    
    1. 函数内不允许出现重名参数

    例: 声明函数,三个形参(a,b,b),对比严格和非严格模式

            "use strict";
            function fn(a,b,b){
                console.log(a);
                console.log(b);
            }
            fn(2,3,4)
    

    3 arguments对象不允许被动态改变

    例:函数内部修改形参的值,a=20,对比严格和非严格模式的输出

            function fn(a,b){
                a = 20;
                console.log(a);
                console.log(b);
                console.log(arguments);
            }
            fn(2,3)
    

    4 this无法指向全局对象

    例:在函数的内部输出this,查看结果

        function fn(){
                console.log(this);
            }
            fn();
    

    5.新增的保留字:implements,interface,let,package,private,protected,public,static,yield

    针对单个函数:

    将 "use strict" 放在函数的第一行,则整个函数以“严格模式”运行。

     // 使用范围分为全局和局部两种
        // 全局:整个js都有效
        // 局部:只在函数中
      //  "use strict";// 全局有效
        
        b = 299;
        alert(b);
    
        // 函数内有效
        function fn(){
            "use strict";
            a  =100;
            alert(a);
        }
        fn();
    

    ES5新增数组常见方法[掌握]

    indexOf

    语法: arr.indexOf(item,start);

    方法可返回数组中某个指定的元素位置,索引位置从0开始,如果在数组中没找到指定元素则返回 -1。

    参数 描述
    item 必须。查找的元素。
    start 可选的整数参数。规定在数组中开始检索的位置

    例: 从数组 arr = ["a","b","c","d","e"];找出a的位置 .

       var arr = ["a","b","c","d","e"];
        arr.indexOf("a");        //0
        arr.indexOf("g");
    
    forEach

    方法用于调用数组的每个元素,并将元素传递给回调函数。没有任何返回值.

    语法: array.forEach(function(currentValue, index, arr));

    function(currentValue, index, arr) 是回调函数必须得.

        currentValue: 必需。当前元素.
    
        index:可选。当前元素的索引值。
    
        arr:可选。当前元素所属的数组对象。
    

    例:遍历数组 arr =["a","b",255,512,"hello"]

            var arr = ["a","b",255,512,"hello"];
    
            var a = arr.forEach(function(value,index){
                 console.log(value);
                 console.log(index);
            })
            console.log(a);
            
    
    map

    语法: array.map(function(currentValue,index,arr))

    map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值

       方法按照原始数组元素顺序依次处理元素。 
    

    function(currentValue, index, arr) 是回调函数必须得.

    currentValue: 必需。当前元素.
    
    index:可选。当前元素的索引值。
    
    arr:可选。当前元素所属的数组对象。
    

    注意: map() 不会对空数组进行检测,map() 不会改变原始数组。

    例:将arr2 = [4,5,6,7,8]乘以1.3后返回

            var arr2 = [4,5,6,7,8]
            var b = arr2.map(function(value,index){
    //          console.log(value)
    //          console.log(index)
                return value+value*0.3;
            })
            console.log(arr2)
            console.log(b)
    
    filter

    语法:array.filter(function(currentValue,index,arr))

    filter() 方法创建一个新的数组,是将函数执行一遍,只有在布尔值为true的时候才会返回该数据

    function(currentValue, index, arr) 是回调函数必须得.

    currentValue: 必需。当前元素.
    
    index:可选。当前元素的索引值。
    
    arr:可选。当前元素所属的数组对象。
    

    注意: filter() 不会对空数组进行检测, 不会改变原始数组。

    例: 返回 arr2 = [4,5,6,7,8]大于5的数据

            var c = arr2.filter(function(value,index){
    //          console.log(value)
    //          console.log(index)
                return value <= 5
            })
            console.log(c)
            
    
    字符串常见API

    indexOf(data,start); //用于返回某个数组或者字符串中规定字符或者字符串的位置;

    例1:找出str = "abcdefg”中a的位置

      var str = "abcdefg”;
       str.indexOf("a");    //0 返回当前查询字符所在的位置的下标,如无,返回-1,start表示从第几位开始查询。
    

    charAt(index); //返回指定位置的字符,index为下标

    例1:找出str = "abcdefg”中下标为3的字符

    var str = "abcdefg";
     console.log(str.charAt(2));
    

    substring(n,m); //返回从指定位置,到结束位置(不含)的字符串,如果不指定结束位置,则从开始位置到结尾

    例:截取一个字符串

        var str = "abcdefg";
         console.log(str.substring(1,3));
    

    slice(n,m); //同substring,需要注意和数组中方法slice()的相似

    例:分割str = "hoeololoworlodo";字符串

      var str = "hoeololoworlodo";
      console.log(str.slice(1,3));
    

    split("-"); //通过指定字符分割字符串,返回一个数组 '-' 表示分割符号.是任意的

    例1:将字符串str = "hoeololoworlodo";转化为数组

       // split()  将字符串转化为数组
        var str = "hoeololoworlodo";
        // 以o为分隔符
        var arr = str.split('o');
       // console.log(arr);
    
        var str1 = 'I want to betifule girl';
        // 以空格为分隔符,返回一个数组
        var arr1 = str1.split(' ');
        console.log(arr1);
    

    将2:全班人的姓名字符串 str = "小崔,老王,东东,琪琪,亚楠" 通过','进行分割;

     var str = "小崔,老王,东东,琪琪,亚楠";
       var arr2 = str2.split(',');
       console.log(arr2);
    

    replace("需要替换的字符串","替换之后的字符串") //将字符串中的一些字符替换为另外一些字符。最好配合正则使用,默认只替换一次

    例1:用'哈'替换str = "hoeololoworlodo";中的o

    var str = "hoeololoworlodo";
    // 使用'哈'替换o
    var str1 = str.replace('o','哈');
    console.log(str1);
    

    作业:用'啊'替换str = "hoeololoworlodo";中所有的o

    // 使用正则方式匹配
    var str = "hoeololoworlodo";
    console.log(str.replace(/o/g,'啊'));
    

    多学一招:其他字符串相关的方法

    lastIndexOf():返回字符串最后出现的位置
    toLowerCase():转成小写
    toUpperCase():转成大写
    

    值引用和址引用

    简单数据类型 引入变量存储的时候,存的是值本身 =====>值类型

    复杂数据类型,,引入变量存的时候,存的是引用、地址 =====>引用类型

    场景1:基本变量的值引用

     var num = 11;
     var num1 = num;
     num = 20;
     console.log(num);
     console.log(num1);
    
    

    场景2:对象的址引用

    var obj = {
      name:"zs",
      age:18
    }
    
    var obj1 = obj;
    obj1.name = "ls";
    console.log(obj.name);
    console.log(obj1.name);
    
    

    场景3:函数中的局部变量

    function fn(x, y) {
      // 函数的参数 其实就是函数内部的局部变量
      x = x + 1;
      y = y + 1;
      console.log(x);
      console.log(y);
    }
    
    var x = 10;
    var y = 20;
    fn(x, y);
    console.log(x);
    console.log(y);
    
    

    场景4:函数中使用对象进行址传递

    var p = {
      name:"zs",
      age:18
    }
    function fn(person) {
      person.name = 'ls';
      console.log(person.name);
    }
    fn(p);
    console.log(p.name);
    
    

    相关文章

      网友评论

          本文标题:js的严格模式

          本文链接:https://www.haomeiwen.com/subject/iozruhtx.html