浅拷贝/深拷贝 正则表达式

浅拷贝:拷贝就是复制,就相当于把一个对象中所有的内容,直接复制一份,或者是将这个对象的地址给另一个对象,他们的指向是相同,两个对象之间有共同的属性和方法
var obj = {
        name: "小明",
        age: 12,
        car: ["奔驰", "保时捷", "兰博基尼", "玛莎拉蒂"]
    }
    var obj1 = {};

    //函数封装:浅拷贝,把一个对象中的属性全部复制到另一个对象中
    function extend(a,b){
        for (var key in a) {
            b[key] = a[key];
        }
    }

    extend(obj,obj1);
    console.dir(obj1);

深拷贝:

深拷贝:拷贝还是复制的意思,深,把对象中所有的属性和方法,一个一个的找到,并且在另一个对象中开辟相应的空间,一个一个的存储到另一个对象中
深拷贝:浅拷贝+递归来实现
 var obj = {
        name: "小明",
        age: 12,
        car: ["奔驰", "保时捷", "兰博基尼", "玛莎拉蒂"],
        dog: {
            name: "大黄",
            age: 1
        }
    }
    //声明一个空对象①
    var obj1 = {};

    function extend(a, b) {
        for (var key in a) {
            //获取a对象中所有的属性值
            var item = a[key];
            //判断属性类型:简单数据类型(直接复制),数组和对象(开辟空间,在复制)
            //先判断这个属性是不是数组
            if (item instanceof Array) {
                //如果是数组,那么在b对象中添加一个新的属性,并且这个属性值也是一个数组
                b[key] = [];//创建一个对象①
                //将a对象(此时就是item是一个数组)中的属性一个一个的复制到b对象(空数组)的属性中
                extend(item, b[key]);
            } else if (item instanceof Object) {//判断这个属性是不是一个对象
                //如果是对象,在b对象中添加一个属性,属性值是一个空对象
                b[key] = {};
                extend(item, b[key]);//将a对象(是item,一个对象)中的属性一个一个复制到b对象(空对象)的属性中
            } else {
                b[key] = item;
            }
        }
    }

    extend(obj, obj1);
    console.dir(obj1);

正则表达式:

 正则表达式:也叫规则表达式,按照一定的规矩组成一个表达式,这个表达式的作用主要是匹配字符串的

"中国移动电话:10086,中国联通:10010,电信:10000"----可以写一个正则表达式找出所有的数字

  正则表达式的组成:由元字符或者限定符组成的一个式子
              作用:匹配字符串

  ①元字符:
   . 表示除了换行符以外的任意一个字符  "fd大三的2323,、,、"
   [] 表示范围:
       [0-9]:表示0到9之间任意一个数字   "2324"
       [a-z]:表示a到z之间任意一个字母
       [A-Z]:表示A到Z之间的任意一个字母
       [a-zA-Z]:表示所有的字母中的任意一个
       [0-9a-zA-z]:表示所有的数字和字母中的任意一个  "dfd3434"
       [3-6]:表示3到6之间任意一个数字
      另一个含义:把正则表达式中的元字符的意义取消掉
       [.]:表示一个.
   | 或者
        [0-9]|[a-z]:要么是一个数字,要么是一个小写的字母
   () 分组 一般用于提升优先级
        [0-9]|([a-z])|[A-Z]
        ([0-9])|([1-7])|([a-z]):三个组,从左往右开始计算

   ②元字符,或者叫限定符
   * 表示前面的表达式出现了0次或者多次
     [a-z][0-9]* 任意的一个小写字母,后面要么是0个数字,要么是多个数字
     "fdsfs0880808"
   + 表示前面的表达式出现了1次或者多次
       [a-z][0-9]+ 任意一个小写字母,后面至少出现一个数字
       "fdfd23424"
   ? 表示前面的表达式出现0次到1次,最少出现0次,最多出现1次,另一个含义:阻止贪婪模式
       [9][a-z]? "349aaa" "9"

    ③限定符:限定表达式出现的次数
     {0,}: 表示前面表达式出现了0次或者多次 和 *  一样
     {1,}: 表示前面的表达式出现了1次或者多次  和 +  一样   [a-z][3-5]{1,}  "fsfs344777"
     {0,1}:表示前面的表达式出现了0次或者1次   和? 一样
     {1,9}:表示前面的表达式出现了1次至9次
     {4}:前面的表达式必须出现4次
     {,10}-----错误的,不能这样写

     ^ 表示以什么开始,或者取反
           ^[0-9]:表示以数字开头
           ^[a-z]:表示以小写字母开头
           [^a-z]:表示非小写字母
           [^0-9a-zA-Z]:非数字小写字母大写字母
     $ 表示以什么结束
           [0-9][a-z]$:表示一定要以小写字母结尾   "8080dfdf"
     ^[0-9][a-z]相当于严格模式  "3f343e"


   \d :任意一个数字  [0-9]
   \D :任意非数字  字母,特殊符号
   \s :空白符
   \S :非空白符
   \w :非特殊符号   字母数字下划线[a-zA-Z0-9_]
   \W :特殊符号 !$#%$%&^

你可能感兴趣的:(浅拷贝/深拷贝 正则表达式)