美文网首页
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有两中开发模式:非严格模式(默认)+严格模式(“ues strict”) 严格模式:会进行更严格的代...

  • 开发中的严格模式

    js中有严格模式和非严格模式两种运行环境 在开发中,有非严格模式和严格模式2种开发模式 在严格模式下,会做更加严格...

  • js 严格模式

    "use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。它不是一条...

  • js:严格模式

    严格模式:js的一种运行模式,设立严格模式主要有以下几个: 1、消除js语法的一些不合理、不严谨之处,减少一些...

  • js严格模式

    1.为什么用严格模式 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为; 消除代码运行的一些...

  • JS严格模式

    一、概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"。顾名思义,这种模式使得Ja...

  • JS 严格模式

    一、如何使用严格模式?可以在js文件的最开头写入,这样就会在整个js文件中使用严格模式 或者在一个函数的开头写入,...

  • js严格模式

    一、概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。...

  • js严格模式

    链接地址:http://www.cnblogs.com/xiaohuochai/p/4804903.html"us...

  • JS 严格模式

    'use strict' 是在一个严格的模式下 在正常模式中,如果一个变量没有声明就赋值,默认是全局变量。严格模式...

网友评论

      本文标题:js的严格模式

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