Loading...
墨滴

FYH2021

2021/09/17  阅读:33  主题:默认主题

js

基础随笔

  1. prompt(“输入内容”);其取过来的值为字符串

  2. 变量注意规则:

    • 声明多个变量可用:var a,b,c,同c、java等多种语言

    • 可不声明变量,直接使用,例:

      qq=100
      console.log(qq);
    • 变量名严格区分大小写,且不能以数字开头

    • 变量不要写到字符串里面,是通过和字符串相连的方式实现的

  3. js为弱类型或者说动态语言

  4. 数据类型与运算:

    • 除了parseInt()、parseFloat()、number()转换数字型的方式,还有一种隐式转换:console.log('12'-0) //结果为12;console.log('12'-‘2’) //结果为10

    • 浮点数 算数运算里面会出现问题,不能直接拿浮点数来进行比较 是否相等,例:

      var num=0.1+0.2
      console.log(num == 0.3); //flase
    • 用布尔值参与逻辑运算,当形式为:123 && 456 ,123 || 456时,结果问题:

      • 为逻辑与短路运算:
        • &&:如果表达式1 结果为真,则返回表达式2,如果表达式1为假,则返回表达式1;
        • ||:如果表达式1 结果为真,则返回表达式1,如果表达式1为假,则返回表达式2
  5. argumens是当前函数的一个内置对象,所有函数都内置了一个argums对象,它存储了传递的所有实参;它的展示形式为一个伪数组,具有以下特点:

    • 具有length属性
    • 按索引方式储存数据
    • 不具有数组的push、pop等方法
  6. js引擎运行js代码分为两步:预解析、代码执行

    • 预解析:js引擎会把js里面所有的 var、function提升到当前作用域的最前面,分为变量提升、函数提升
      • 所有声明变量提升到当前作用域最前面,,不提升赋值操作
      • 所有函数声明提升到当前作用域最前面,不调用函数
    • 代码执行:按照代码书写顺序从上往下执行
  7. 对象

    • 里面的属性、方法,采用键值对的形式表示,例:属性名:

    • 多个属性或者方法中间用逗号隔开

    • 方法冒号后面跟的是一个匿名函数

    • 使用:

      • 对象名.属性名、对象名['属性名']、对象名.方法名()

      • 构造函数名首字母需大写:例:function Star(){ };当利用构造函数创建对象时,构造函数里面得用this,不需要return就能返回结果

      • for in 遍历对象时:for(变量 in 对象){ };通常变量位置常用 k 或者 key 例:

        for(var k in obj){
            console.log(k); //k变量输出 得到属性名
            console.log(obj[k]); //得到属性值
        }
  8. Date日期对象

    • 是一个构造函数,必须使用new 来调用创建我们的日期对象

      var date = new Date();  //没有参数 就返回系统当前时间
      //参数常用写法:数字型: 2021,10,01 或者 字符串型:‘2021-10-01 8.8.8’
      var date1 = new Date(20211001);
      console.log(date1);  //注意:返回的是11月
      var date2 = new Date(2021-10-01 8.8.8);
      console.log(date2);  //注意:返回的是11月
    • 其中getDay()方法:周一返回1,周六返回6,周日返回0,通过构造数组,用索引号得到大写值;getMonth()方法返回值0-11

    • Date对象是基于1970.1.1起的毫秒数(时间戳),利用总的毫秒数计算时间,较精确。

      • 通过valueOf() 、getTime()方法获得
      • 也可:var date = +new Date() //常用
      • H5新增Date.now()
  • 倒计时案例:
    • 利用时间戳,(输入毫秒数-总毫秒数)/1000 = 秒数
    • 通过parseInt();计算天、时、分、秒
      • 为了美观,判断各项 < 0 情况,拼接0
  1. Array数组对象

    • 两种创建方式:

      • 字面量方式:var arr = [1,2,3];
      • new Array():var var1 = new Array(2) //2表示长度; var var1 = new Array(2,3) //创建[2,3]的数组
    • 判断是否为数组

      • instanceof:运算符 ,检测是否为数组;var arr = [];arr instanceof Array
      • var arr = [];Array.isArray(arr); //优于instanceof,H5新增,ie9以上版本支持
    • 添加数组元素:

      • push():数组末尾添加 一个或多个 元素,var arr = new Array[2,3];arr.push(2,'你好') //返回值为4
      • unshift:数组头部添加 一个或多个 元素,同上理
    • 删除数组元素

      • pop():删除数组最后一个元素,不带参数,返回值为删除元素
      • shift():删除数组第一个元素,不带参数,返回值为删除元素
    • 筛选数组

      var arr = [500,600,700];
      var newarr = [];
      for(var i = 0;i < arr.length;i++){
          if(arr[i]>500){
              newarr.push(arr[i]);
          }
      }
    • 数组排序

      • 翻转数组:reverse()方法

      • 冒泡排序:sort()方法,bug:只能单位数排序,解决方法:

        var arr = [13,4,25,1,7];
        arr1.sort(function(a,b){
            return a-b;  //升序排序
            return b-a;  //降序排序
        });
    • 数组索引方法

      • indexOf(数组元素):返回该数组元素的第一个索引号,若找不到该元素,则发回-1
      • lastIndexOf(数组元素):返回该数组元素的最后一个索引号,若找不到该元素,则发回-1
    • 数组去重案例

      • 核心算法:遍历旧数组,拿旧数组元素查询新数组,若不出现在新数组,就添加到新数组,否则不添加

        function unique(arr){
            var newArr = [];
            for(var i = 0;i < arr.length;i++){
                if(newArr.indexOf(arr[i])===-1){
                    newArr.push(arr[i]);
                }
            }
            return newArr;
        }
    • 转换为字符串

      • toString();
      • join(); //括号里可指示分割符号,默认为逗号
      • concat()、slice()、splice()
  2. 字符串对象

    • 为了方便操作基本数据类型,js提供了三种特殊的引用类型(基本包装类型):String、Number、Boolean

    • 为基本包装类型(简单数据类型 包装成了 复杂数据类型),有了属性和方法

          var str = 'int';
          console.log(str.length);  //有了属性
          //包装过程:
          var temp = new String('int');  //包装
          str = temp;  //临时变量赋值给str
          temp = null;  //销毁临时变量
          
          ```

    • 不可变性

         var str = 'int';
         str = 'red'  //看上去改变了数值,其实是开辟了新的内存空间,变量名进行了重新指向
         //所以,不应拼接过多字符串
         ```

    • indexOf('要查找的字符',起始的位置)、lastIndexOf()

    • 字符串中某个字符出现的位置和次数:

         var str = 'zxcvbnmcui'
         var index = str.indexOf('c');
         var num = 0;
         while(index!=-1){
             console.log(index);
             num++;
             index = str.indexOf('c',index+1);
         }
         console.log('字符c出现次数为'+num);
         ```
       
    • charAt(index):根据位置返回字符

         //遍历字符串
         var str = 'abcd'
         for(var i = 0;i < str.length;i++){
             console(str.chatAt(i));
         }
         ```
       
    • charCodeAt(index):返回相应索引号的ASCII值 目的:判断用户按下了什么键

    • str[index]:H5新增,作用同charAt(idnex)

    • 统计字符串中出现次数最多的字符及其次数:

         var str = 'zxcvbnmasdfghzzznnf'
         var obj = {};
         for(var i = 0;i<str.length;i++){
             var chars = charAt(i);
             if(obj[chars]){
                 obj[chars]++;
                }else{
                    obj[chars]=1;
                }
         }
         //遍历对象
         var max = 0;
         var ch = '';
         for(var k in obj){
             if(obj[k]>max){
                 max=obj[k];
                 ch = k;
             }
                
         }
         console.log('出现次数最多的字符是'+ch+',出现次数为:'+max);
         ```
       
    • concat(str1,str2...):拼接字符串,等效+,+更常用

    • substr(star,length)

    • replace('被替换的字符','替换为的字符'):只会替换第一个字符,使用循环实现全部替换

    • split('分隔符'):字符串转换为数组,例:

         var str = 'red,pink,blue';
         console.log(str.split(','));
         ```
       
    • toUpperCase()、toLowerCase()

  3. 简单数据类型和复杂数据类型

    • 简单数据类型也称基本数据类型、值数据类型,包括:number、String、boolean、undefined、null
    • var time = null //返回一个空的对象 object,使用场景:当要使用对象且暂时为空对象时
    • 复杂数据类型也被称为引用类型,需要new关键字创建对象的
  4. 堆栈空间分配区别(js中没有堆栈概念,这里只是通过此方式帮助理解):

    • 栈(操作系统):有操作系统自动分配释放存放函数的参数值、局部变量的值等,其操作方式类似于数据结构中的栈;简单数据类型存放在栈里面。
    • 堆(操作系统):存储复杂类型(对象),一般有程序员分配释放,若程序员不释放,有垃圾回收机制收回;复杂数据类型存放在堆里面。
    • 简单数据类型 是存放在栈里面的 里面直接开辟一个空间存放的时值
    • 复杂数据类型 首先在栈里面存放地址 十六进制表示 然后这个地址指向堆里面的数据

FYH2021

2021/09/17  阅读:33  主题:默认主题

作者介绍

FYH2021