Day07 严格模式

严格模式

严格模式的目的

  • 消除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;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 1,014评论 0 1
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,152评论 0 4
  • 本章内容 使用对象 创建并操作数组 理解基本的 JavaScript 类型 使用基本类型和基本包装类型 引用类型的...
    闷油瓶小张阅读 652评论 0 0
  • 挑一个月圆的晚上 把一个月饼 咬成一口成缺
    Narcoris阅读 92评论 0 0
  • 这个问题写的人很多,不能说没有意义,只是从我的角度看问题。 希望我稚嫩的观点,稚嫩的经历,稚嫩的语言,各位看官不要...
    Flor阅读 393评论 0 1