js:ES5、正则表达式

严格模式

"use strict"

严格模式:ES5 新增的严格模式
因为JS只用了10天就写完。
有很多不规范的地方。 我们平时是尽量避免这些不规范的地方。

如何开启严格模式
"use strict"; 在作用域的第一行加该字符串
如果加在全局代码第一行 那么整个全局作用域都会处于严格模式 全局严格模式
如果加在函数代码的第一行 那么只有该函数内处于严格模式 局部严格模式
这个代码一定要放在第一行

  • 声明变量必须使用var
  • 函数的形参不可以重名
    Uncaught SyntaxError: Duplicate parameter name not allowed in this context
  • 函数形参与arguments的关系

    在非严格模式下 函数的形参与arguments是一一对应的关系 改了谁 都会影响另外一个
    在严格模式下 函数形参 与arguments依旧是一一对应的关系 但是 修改一个不会影响另外一个

  • 不可以使用八进制
    Decimals with leading zeros are not allowed in strict mode
  • 不可以使用保留字作为变量名
    Uncaught SyntaxError: Unexpected strict mode reserved word
  • eval

    eval是一个内置函数 该函数的作用是将参数当作代码来执行
    严格模式下的eval并不是不能用 而是在eval的执行过程中 加入了一层作用域 保证内部的变量不外泄

  • 不能删除变量
    Delete of an unqualified identifier in strict mode
  • 不能用arguments.callee
    'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
  • 不能用with

数组的方法(ES5)

  • forEach()
    可以循环数组
		// 循环 
         for (var i = 0; i < arr.length; i++) {
             console.log(arr[i])
         }
        // 1 不好 i变量是全局变量 会自动注册到window上 且循环结束后不消失
        // 2 不好 想要获取数组中的内容必须要掌握数组的访问数据方式
        // 3 好  随时可以终止循环
        
         arr.forEach(function(value, index){
             // console.log(value, index);
             console.log(this)
         });
        // 弥补了全局变量和必须掌握数据访问方式的缺陷 但是无法停止
  • map()
    map方法负责根据一个数组映射出一个新数组
		var arr = [10, 20, 30, 40, 50];
        var arr1 = arr.map(function (value, index, self) {
            // 这里负责书写映射规则 一定记得返回值
            return value * 10;
        })
        console.log(arr1)
  • filter()
    过滤函数 参数也是函数 函数的形参 依旧表示 成员、索引、原数组
		var arr = ["张三", "李四", "王五", "赵六", "田七", "刘八", "专业跳伞运动员"];

        var arr1 = arr.filter(function (a, index) {
            // console.log(index)
            return index < 3;
        })
        console.log(arr1);
  • reduce()
    reduce方法用于累加数组中的每一个成员
		var arr = [
            { score: 10 },
            { score: 20 },
            { score: 30 },
            { score: 40 },
            { score: 50 },
        ];
        // prev 表示上一次这个函数的返回值
        // value 表示成员
        // index 表示索引
        var result = arr.reduce(function (prev, value, index, self) {
            return prev + value.score;
        }, 0);
        console.log(result);

还有一个方法叫做 reduceRight

  • some
    该方法用于判断数组内是否有至少一个符合条件的内容
		var arr = [89, 66, 87, 92, 13, 76];

        //判定arr数组中是否有低于60分的成绩
        var has60 = arr.some(function(value) {
            return value < 60;
        })
        console.log(has60)
  • every
    该方法用于判断数组内是否都符合某个条件
		var arr = [89, 66, 87, 92, 13, 76];
        var has60 = arr.every(function(value) {
            return value >= 60;
        });
        console.log(has60)
  • fill

fill 该方法用于将数组内填充
第一个参数表示要填充的内容 (必填参数)
第二个参数表示从哪儿开始填充 (可选 包含)
第三个参数表示到哪里结束 (可选 不包含)
定义数组的方式
var arr = new Array(10);
arr.fill(1, 0, 9);
console.log(arr);

定义自己的forEach

		var arr = ["张三", , "王五", "赵六", "田七", "刘八", "吴九"];
		function forEach(arr, fun) {
            for (var i in arr) {
                fun(arr[i], +i);
            }
        }

        forEach(arr, function(a, b) {
            console.log(a, b, "自己")
        })

JSON

JSON: JavaScript Object Notation JS对象表达式
它是一种数据格式
只要符合 key: value 这样的格式都叫做JSON
ES中符合JSON数据格式有两个: 对象数组

JSON提供了两个方法 JSON.parse JSON.stringify
JSON.stringify用于将对象和数组转为JSON字符串
JSON.parse 用于将JSON字符串转为对象或数组

浅复制

浅复制复制的引用数据类型复制的是地址

深复制

		var obj = {
            name: "小明",
            age: 22,
            sex: "男",
            girlFriend: {
                name: "大壮",
                age: 20,
                sex: "女",
                brother: {
                    name: '小壮',
                    age: 16,
                    sex: "男",
                    girlFriend: [
                        { name: "小宝贝1号" }, { name: "小宝贝2号" }, { name: "小宝贝3号" }, { name: "小宝贝4号" }
                    ]
                }
            }
        }

        // 定义一个函数
        function deepCopy(obj) {
            // 定义新对象
            var copy = {};

            // 循环obj 
            for (var i in obj) {
                if (typeof obj[i] === "object" && obj[i] != null) {
                    // 因为此时 obj[i] 是一个对象
                    // 所以要使用 deepCopy再复制一次这个对象
                    copy[i] = deepCopy(obj[i]);
                } else {
                    copy[i] = obj[i];
                }
            }
            return copy;
        }

        var obj1 = deepCopy(obj);

正则表达式

正则表达式的定义
  • 字面量定义 /正则表达式/修饰符

    • /\d+/g
  • 构造函数定义 RegExp(正则表达式, 修饰符);

    • new RegExp(“abc”, g)
      • 第一个参数是正则表达式的表达体
      • 第二个参数是正则表达式的修饰符
  • 转义字符

    • \d 所有的数字
    • \D 所有的非数字
    • \w 所有的数字字母下划线
    • \W 所有的非数字字母下划线
    • \s 所有的空白符
    • \S 所有的非空白符
  • 特殊字符(元字符)

    • . 除了回车和换行之外的其它所有内容
    • () 分组 分组内是一个整体
    • [] 范围
      • [a-z]
      • [A-Z]
      • [0-9]
      • [0-9A-Za-z]
    • {} 数量
      • {10} 限定十个 不能多也不能少
      • {3,5} 最少三个 最多五个
      • {1,} 最少一个 最多无穷个
    • ? 零个或一个
    •       + 一个或任意个
      
    •       * 零个或任意个
      
    • | 或者

字符串方法replace

		//字符串中有一个方法 replace 
        var str = "此次美   国大   选,遇见了   一个懂     王";
        var str1 = str.replace(/\s+/g, "");
        console.log(str1);

        //第二个参数可以是函数 该函数的返回值会作为替换上的内容 
        var str = "此次美   国大   选,遇见了   一个懂     王";
        //函数的第一个参数是匹配到的全部内容  第二个参数是匹配到的内容的第一个字符的下标
        var str1 = str.replace(/\s+/g, function(match, index) {
            console.log(match, index)
            return "aaa";
        });
        console.log(str1)
		// 题目
        var str = '<table><tr><td id="u{{id}}">{{id}}</td></tr><td title="{{name}}">{{name}}</td></table>';
        // 结合对象:
        var user = { id: "1234", name: "tony" };

        // 替换
        // 当正则表达式中出现 分组的时候  我们的函数中的参数 索引被挤到了后面 也就是从第二位开始是括号所捕获到的内容 正则的分组可以有多个 参数$n就可以有对应个数
        var str1 = str.replace(/{{(\w+)}}/g, function (match, $1,  index) {
            // return user[match.slice(2, -2)];
            return user[$1]
        })
        console.log(str1)


        // 变为:
         '<table><tr><td id="u1234">1234</td></tr><td title="tony">tony</td></table>'
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值