day07

头像
shasha
    阅读 4 分钟

    对象就是一组数据,描述同一个概念的不同属性

    1. JSON对象:

    1) 定义:

    • 描述数据的一种格式,将若干个属性或方法整理成一个对象。可以方便的表示复杂对象。

    2) 语法:

      1. 花括号
      1. 键名要有双引号(字面量方式表示对象,键名不需要引号)
      1. 字符串值要有引号
      1. 键值之间是冒号 key:value
      1. 键值对之间是逗号,最后一个键值对后面不要加逗号
    var cat= {
        "name":"猫咪",
        "age":3,
        "hobby":"fish",
        "action":function(){
            console.log('喵~');
        }        
    }

    3) 如何调用JSON里的属性

    // 1.打点 属性必须不带引号
    //console.log(cat.'name');// Uncaught SyntaxError: Unexpected string
    console.log(cat.age);//3
    console.log(cat.hobby);//fish
    // 2.下标法 属性必须带引号
    // console.log(cat[name]);//undefined
    // console.log(cat[age]);//age is not defined
    console.log(cat['hobby']);//fish

    4) for in 的应用

    for(var index in cat){
        //for...in中不能通过点方式获取JSON对象属性
        // console.log(cat.index);//undefined
        //可以通过下标法获取
        console.log(cat[index]);
    }

    5) this

        var huatengMa = {
            'name': '马化腾',
            'age': 50,
            'fun':function(user){
            //JSON对象的花括号中的函数,如果使用其他的函数或属性的话,需要加前缀this 
                console.log(this.name + '来' + user + '抽奖');
            }
        }
        huatengMa.fun('小米');

    2. 严格模式

    • "use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。
    • "use strict" 的目的是指定代码在严格条件下执行。
    • 严格模式下你不能使用未声明的变量
    • 浏览器支持: IE10+ firefox4+Safari5.1+ Chrome

    普通模式:

    <script type="text/javascript">
        a =123;
        console.log(a);//123
    </script>

    严格模式:

    <script type="text/javascript">
        'use strict';
        a =123;
        console.log(a);//a is not defined
    </script>

    3. ES5新增的数组的方法

    (1) indexOf

    • 在数组中查找一个数所在的位置。
    • 返回值:返回查找元素的下标,找不到返回-1
    • 应用: 数组的去重

      // 数组去重
      var a = [5,7,7,3,8,7,8];
      var b = [];
      for(var i=0; i<a.length; i++){
          if(b.indexOf(a[i])==-1){
              b.push(a[i]);
          }
      }
      console.log(b);//5, 7, 3, 8

    (2) 回调函数

    • 被当做另一个函数的参数的函数

    如下示例: 假设f2是第三方提供的函数,是非开源的,所以用户无法修改函数体内的代码。但是需求是:f2调用f1。所以把f1当作参数传给第三方,第三方函数会自动在函数体内合理的位置调用传进去的回调函数

    <script type="text/javascript">
        var f1 = function(){
            console.log('f1');
        }
        //假设f2是第三方提供的函数,用户是无法打开函数体内部去修改代码的
        function f2(f){// 实参f1==形参f => f1() == f()
            
        }
        f2(f1);
    </script>
    回调函数的使用:
    forEach 没返回值,直接改变原数组
    • 对数组的每个元素做某个处理(函数的方式),没有返回值,直接改变当前数组。
    • 注意:foEach()函数的参数是个回调函数,forEach对应的回调函数有三个参数(数组元素内容,【元素索引】,【数组本身】)
    • 回调函数: 回调函数的参数,也是固定好的

      var arr=[6,9,1];
      function add(item, index, arr){
          arr[index]*=10;
      }
      arr.forEach(add);
      console.log(arr);//60, 90, 10
    map 有返回值, 通过return返回一个数组
    • 把原始数组的每个元素进行某种处理后,返回(映射)一个新的数组。回调函数参数是数组元素本身。
    • 注意:map()对应的回调函数有三个参数(数组元素内容,元素索引,数组本身)

      map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

      有没有return,都会有返回值。

    var arr=[7,4,5];
    function add(item, index, arr){
        arr[index] += 10;
        return 2;
    }
    var arr1 = arr.map(add);
    console.log(arr1);//70, 40, 50

    问题:forEach与map有什么区别?

    答:在于返回值的不同。forEach无返回值; map返回一个新的数组

    filter 每个元素在遍历的时候根据条件,选择是否return;返回一个新数组
    • 根据条件过滤数组的元素,filter的回调函数需要返回的是boolean类型的值。
    • 注意: filter()对应的回调函数有三个参数(数组元素内容,元素索引,数组本身)
    • filter() 不会改变原始数组。将满足条件的元素重新生成一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
    var arr=[7,4,6,9];
    function myFilter(item, index, arr){
        // 返回奇数
        if(item%2){
            return item;
        }
    }
    var arr1 = arr.filter(myFilter);
    console.log(arr1);//7, 9
    reduce 累加每个元素的值
    • 如果未写return, 仍然会有返回值(undefined)
        function add(total, item, index, arr){
            //total 的初始值为0
            total = total +item;
            return total;
        }
        console.log(arr.reduce(add));

    4. 字符串的定义和创建

    (1)基本类型

    var str = 'hello';
    console.log(str, typeof str);//hello string

    (2)引用类型

    var str1 = new String('world');
    console.log(str1);//{world}
    console.log(typeof str1);//Object

    5. ASCII码表

    是一个标准,把每个字符与一个0-255的数字对应起来,这样就可以把字符变为数字,而后变为二进制码了。

    13--->回车

    32--->space

    48--->字符0

    65--->A

    97--->a

    • charAt(下标):返回下标所对应的字母
    • charCodeAt(下标):返回下标所对应的字母的ASCII码
    var str='120ashioA'
    console.log(str.charAt(1));//2 下标所对应的字母 等价于str[1]
    console.log(str.charCodeAt(3));//97 下标所对应的字母的ASCII码

    6. 字符串常见API和属性

    • length:表示字符串的长度;
    • String.fromCharCode(97); //a 将编码转换成字符
    • indexOf("abc") 查找字符串第一次出现的位置
    • lastIndexOf("abc") 查找字符串最后一次出现的位置。如果没找到则返回-1。
    • replace(src,dest) : 返回被dest替换src的字符串。
    • 截取字符串

      • slice

        • slice(start,end) 提取字符串的某个部分,并以新的字符串返回被提取的部分。
        • 两个参数表示截取的开始下标和结束下标
        • 左闭右开
      • substring

        • substring(start,end) 提取字符串中介于两个指定下标之间的字符,并以新的字符串返回被提取的部分。
        • 两个参数表示截取的开始下标和结束下标
        • 左闭右开
      • 区别: slice参数支持负数(从后往前算,负数的时候左开右闭),substring不支持负数。
    • split 字符串分割:字符串变数组

      • split(分割符号) :根据分隔符、拆分成数组
      var str = 'hello wo shi xiao mi';
      var arr = str.split('o');
      console.log(arr);//["hell", " w", " shi xia", " mi"]
    • toLowerCase()
    • toUpperCase()

    shasha
    28 声望7 粉丝

    « 上一篇
    day 06 数组
    下一篇 »
    day15 DOM运动