严格模式
严格模式的目的
- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
- 消除代码运行的一些不安全之处,保证代码运行的安全;
- 提高编译器效率,增加运行速度;
- 为未来新版本的Javascript做好铺垫。
进入"严格模式"的标志
"use strict";
如何调用
- 将"use strict"放在脚本文件的第一行,则整个脚本都将以"严格模式"运行
- 将"use strict"放在函数体的第一行,则整个函数以"严格模式"运行。
语法和行为改变
- 全局变量显式声明
- 禁止使用with语句
'use strict';
var obj={
a:1,
b:2,
c:3
}
with(obj){
alert(a);
alert(b);
alert(c);
}
- 禁止this关键字指向全局对象
'use strict';
function fn(){
alert(this);//window--->undefined
}
fn();
- 对象不能有重名的属性
- 函数不能有重名的参数
- 禁止八进制表示法
- 不允许对arguments赋值
- 禁止使用arguments.callee
- 不允许在非函数的代码块内声明函数
'use strict';
if(true){
function fn(){
alert(123);
}
}
fn();//fn is not defined
ES5新增数组操作方法(ECMAscript3 ECMAscript5 ECMAscript6)
- 位置方法----indexOf()
lastIndexOf()返回要查找的项在数组中的索引位置,没找到的情况下返回-1。(两个参数:要查找的项和(可选的)表示查找起点位置的索引)
indexOf() 方法从数组的开头开始向后查找。
lastIndexOf() 方法则从数组的末尾开始向前查找。
迭代方法(不会改变原数组)
- 迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重 复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。
- 两个参数:
- 第一个参数:要在每一项上运行的函数
此函数会接收三个参数:数组项的值、该项在数组中的位置、数组对象本身。
- 第二个参数:(可选的)运行该函数的作用域对象(影响 this 的值)。
- every()
对数组中的每一项运行给定函数,如果该函数对每一项都返回 true ,则返回 true 。
var arr=[1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9];
arr.every(function(){
alert(this);//hehe
},'hehe');
console.log(arr.every(function(value,index,array){//true
return value>0;
}));
- some()
对数组中的每一项运行给定函数,如果该函数对任意一项返回 true ,则返回 true 。
console.log(arr.some(function(value,index,array){//true
return value>6;
}))
- filter()
对数组中的每一项运行给定函数,返回该函数结果为 true 的项组成的数组。
console.log(
arr.filter(function(value,index,array){
return value>5;//[6, 7, 8, 9]
})
);
var arr=[1,2,3,4,5,6,7,8,9,3,3,3];
console.log(
arr.filter(function(value,index,array){
//indexOf(value):从前向后查找的value的索引
//index:默认的数组中的值的索引。
return array.indexOf(value)==index;
console.log(value+'---'+index+'---'+array);
})
);
- map()
对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
//编写函数map(arr) 把数组中的每一位数字都增加30%
var arr=[100,200,300,400,500,200,300,400,500];
var arr1=(arr.map(function(value,index,array){
//return value*1.3;
//return value>100;// [false, true, true, true, true]
return array.indexOf(value)==index;
}));
alert(arr1);
返回就是数组,不考虑true或者false;
- forEach() :对数组中的每一项运行给定函数。这个方法没有返回值。
var arr=[1,2,3,4,5,6,7,8,9];
arr.forEach(alert);
arr.forEach(console.log);
var a=1,b=2,c=3;
console.log(a,b,c);
alert(a,b,c);
arr.forEach(function(value,index,array){
console.log(value,index,array);
})
函数:箭头函数
var arr=[1,2,3,4,5,6,7,8,9];
arr.forEach((value,index,array)=>{
console.log(value,index,array);
})
function sum(a,b){
return a+b;
}
var sum=(a,b)=>a+b;
alert(sum(3,4));
==注意:以上方法都不会修改数组中的包含的值。==
- 归并方法---- reduce() reduceRight()
- 这两个方法都会迭代数组的所有项,然后构建一个最终返回的值。
reduce() 方法从数组的第一项开始,逐个遍历到最后。
reduceRight() 方法从数组的最后一项开始,向前遍历到第一项。
两个参数:每一项上调用的函数和(可选的)作为归并的初始值。
调用的函数接收 4 个参数:前一个值、当前值、项的索引和数组对象。
- 这两个方法都会迭代数组的所有项,然后构建一个最终返回的值。
字符串的两种创建方式(字面量和构造函数)
- var str = new String("abc");
- var str=“abc”;
- 字符串的属性length---字符串的长度
字符串的方法
- charAt(num):返回对应字符串索引的内容。
- charCodeAt(num):返回对应的字符串索引的内容的unicode编码
- String.fromCharCode(unicode编码);将参数中的unicode编码返回成对应的字符串的内容,多个编码用逗号分隔。
- indexOf(‘查找字符’, ’开始位置’):从指定的位置从左往右查找对应的字符,并返回对应字符的位置。如果第二个参数为负数,默认当做0来处理。 没有找到就返回-1。
- lastIndexOf(‘查找字符’,’开始位置’):查找顺序是相反,为从后往前找。
- replace替换字符串 string.replace("tmd", "*");
- split——根据分隔符、拆分成数组
把一个字符串分割成一个数组。通过传递一个参数来分割。第一个参数就是分割字 符串的符号。如果参数为空,也是数组,只有一个数据。第二个参数用来限制数组 的长度,多余的切掉。 - substring():用来截取字符串的内容
没有参数全部截取。相当于从第0位开始截取。
一个参数代表截取从参数的位置往后的字符串。
两个参数代表截取两个参数之间的字符串,包括第一个参数的位置。
两个参数的时候,当第二个参数小于第一个参数,自动交换位置。
如果是负数,当做0来处理。 - substr(start, length); 用来截取字符串的内容
start:开始的索引,如果为负数,从后往前进行截取,包括开始的索引。
length:截取的长度。 - toLowerCase、toUpperCase
toUpperCase()转换成大写
toLowerCase()转换成小写 - ASCII码和字符集
- ASCII(美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。
- 字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。
- API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
- 应用
1.统计字符串中每个字符的个数?(数字、字母、特殊字符)
2.密码验证。 - 综合应用
1.数字字母混合验证码
2 . 已知字符串“aabccdfffgjjjjjjjjj”编程实现以下功能。
- 统计每个字符出现的次数,显示结果;
- 去掉重复的字符,使结果显示 abcdfgj;
网友评论