严格模式[理解]
概念
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);
- 函数内不允许出现重名参数
例: 声明函数,三个形参(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);
网友评论