2018-04-22

javascript基础

一.函数的arguments

  • 伪数组:像数组,但不是数组
  • 可以动态添加参数
 //求任意个数的最大值
     function fn(){
         var max = arguments[0];
         for(var i = 1;i< arguments[i];i++){
             if(max < arguments[i]){
                 max = arguments[i]
             }
         }
         return max;
     }
     var max = fn(12,34,56,890);
     console.log(max);

二.函数的其他案例

   // 翻转数组 reserve(翻转)
     function fn(arr){
     var newArray = [];
     for(var i = arr.length-1; i >= 0; i--){
         newArray[newArray.length] = arr[i];
     }
     return newArray;
     }
     var arr1 = [12,34,56,1];
     var newArray = fn(arr1);
     console.log(newArray);

    // 翻转数组的方法 reverse()
     var arr1 = [12,34,56,1]
     console.log(arr1.reverse());

     // 数组的冒泡排序的原理?
     // 数组的两两比较把大值依次往后挪
     // 外层循环一次取出比较值中的最大值一次,最后冒泡排序完成
     // 注意做个开关提高效率  
     function getMp(arr){
         var isSort;
         for(var i = 0;i < arr.length-1;i++){
             isSort = true;
             for(var j = 0; j < arr.length-1-i;j++){
                 if(arr[j] > arr[j+1]){
                     isSort = false; //还没有排序好,false
                     var temp = arr[j];
                     arr[j] = arr[j+1];
                     arr[j+1] = temp;
                 }
             }
             //定义一个开关,如果true,跳出循环
             if(isSort){
                 break;
             }
         }
         return arr;
     }
     var arr = [12,23,190,89];
     var le = getMp(arr);
     console.log(le);*/

     // var arr = [12,23,190,89];
     // console.log(arr.sort()); //错误

     // 输入年份是否是闰年
     function getYear(year){
         var flag;
             if(year % 4 ===0 && year % 100 !==0 || year % 400 ===0){
                 console.log(year+'是闰年');
                 flag = true;
             } else{
                 console.log(year+'是平年');
                 flag = false;
             }
             return flag;
         }
         getYear(2016);

    //闰年2
     function fn(year){
         var flag = false;
         if(year % 4 === 0 && year % 100 !== 0 || year % 400 === 0){
             console.log(year+'是闰年');
             flag = true;
         } else {
             console.log(year+'是平年');
         }
         return flag;
     }
     fn(1998);

     //获取年月日 是当前年的多少天,中的难点是比如传入的是5月遍历1-5月天数累加
     //一、三、五、七、八、十、腊是31天,四、六、九、十一是30天。平年二月28闰年二月29天
     function getDate(year,month,day){
         var days = day;
         for(var i = 1;i<month;i++){
         if(i === 1 || i === 3 || i === 5 || i === 7 || i === 8 || i ==10 || i === 12){
             days += 31;
         } else if(i === 4 || i === 6 || i === 9 ||i === 11){
             days += 30;
         } else {
             if(getYear(year)){ //if里面调用判断闰年平年的函数
                 days += 29; 
             }else{
                 days += 28;
             }
         }
         }
         return days
     }
     var days = getDate(2018,3,2)
     console.log(days);

    //判断2018.4.21
     function getDate(year,month,day){
         days = day;
         for(var i = 0; i < month; i++){
             if(i === 1 || i === 3 || i === 5 || i === 7 || i === 8 || i === 10 || i === 12){
                 days += 31;
             } else if (i === 4 || i === 6 || i === 9 || i === 11) {
                 days += 30;
             }else if (i === 2){
                 if(getYear(year)){
                     days += 29;
                 } else {
                     days += 28;
                 }
             }
             }
             return days;
         }
         var days = getDate(2018,2,3);
         console.log(days);

三.匿名函数和自调用函数

  • 匿名函数:没有方法名的函数

    注意点:

    1. 不可以独立存在 :只能定义变量等于函数
     var vvv = function(){  
     }
    
    1. 可以通过自调用函数:自己调用自己
  • 自调用函数: 自己调用自己;

      (function (){})();
      +function (){}();
      -function (){}();
      *function (){}();
      /function (){}();
    

四.作用域和作用域链

  • 作用域

    函数或者变量可以起作用访问;
    1.全局作用域:
    在script或者一个独立的js文件中,在全局作用域中定义的变量 全局变量。在任何位置都可以访问.
    2.局部作用域:
    任何一个函数的内部都有一个局部作用域,在局部作用域中定义的变量 局部变量。局部变量只有在定义该变量的函数中可以访问

      // 全局变量
      var a = 10;
      function fn(){
          // 局部变量
          var b = 10;
          //全局变量 ==> window.c = 30,但是不推荐这样使用
          c = 30;
          console.log(a); // 10
          console.log(c); // 30
          console.log(b); // 10
      }
      fn();
      console.log(c) // 30
      console.log(a); // 10
      console.log(b); // b is not defined
  • 作用域链

就近原则

    // 全局变量
     var a = 10; //----->0级作用域链
     function fn(){
          // 局部变量
         var a = 20; //----->1级作用域链
         console.log(a); // 20
        function fn1(){
            // 局部变量  //----->2级作用域链
             console.log(a) // 20
         }
         fn1();
     }
     fn();
     console.log(a); // 10

五.预解析

  • 函数提升:但是赋值不提升
  • 变量提升:调用不提升
  • 函数和变量同时存在,函数优先
  案例:
  // 1.
  var a = 25;
          function abc (){
              alert(a); //undefined
              var a = 10;
          }
          abc(); 
   //预解析
      function abc(){
          var a;
          alert(a); //undefined
          a = 10;
      }
      var a;
      a = 25;
      abc(); // 调用函数而已

   //----------
   // 2.
   console.log(a); //打印函数a
          function a() {
            console.log('aaaaa');
          }
          var a = 1;
          console.log(a);

          // 解析
          var a;
          function a() {
            console.log('aaaaa');
          }
          console.log(a); // 函数整体
          a = 1;
          console.log(a); // 1

          //-------
          var a = 18;
          f1();
          function f1() {
              var b = 9;
              console.log(a);
              console.log(b);
              var a = '123';
          }

          // 解析 
          var a;
          function f1() {
              var b = 9;
              var a;
              console.log(a); //undefined
              console.log(b); // 9
              a = '123';
          }
          a = 18;
          f1();

六.对象概念

  1. 万物皆对象,对象是一个具体的事物,一个具体的事物就会有行为和特征。
  2. js中对象的语法格式
      var student = {
      name: '张飞', // key: value,
      age: 18,
      sex: '男',
      sayHi: function () {
          console.log('hello');
      }
      };
      // 对象 具有  属性和方法
      // 属性: 特征
      // 方法: 行为

七.创建对象

  1. 对象字面量
 var obj = {
     name:'zs',
     age: 18,
     sayHi:function(){
         console.log(obj.name+'hello');
     } 
 }
 console.log(obj);
  1. 用new Object 获取对象
     var obj = new Object;
     obj.name = 'keke';
     obj.age = 21;
     obj.sex = '女';
     obj.sayHi = function(){
         console.log(obj.name+'hello');
     }
     console.log(obj)
  1. 当有多个对象就需要封装函数-->工厂方法
      function Creatstudent(name,age,sex,hobby){
          var obj = new Object;
          obj.name = name;
          obj.age = age;
          obj.sex = sex;
          obj.hobby = hobby;
          obj.sayHi = function(){
              console.log(this.name+'hello');
          }
          return obj;
      }
      var stu1 = Creatstudent('张三',18,'男',['唱歌','跳舞','旅游']);
      var stu2 = Creatstudent('李四',22,'男',['唱歌','摄影','旅游']);
      console.log(stu1);
      console.log(stu2);
      stu1.sayHi();
      stu2.sayHi();
  1. 构造函数 函数名的第一个字母要大写(帕斯卡命名)
  function Student(name,age,sex,hobby){
      this.name = name;
      this.age = age;
      this.sex = sex;
      this.hobby = hobby;
      this.sayHi = function(){
          console.log(this.name+'hello');
      }
  }
  var stu1 = new Student('张三',18,'男',['唱歌','跳舞','旅游']);
  var stu2 = new Student('李四',22,'女',['绘画','跳舞','旅游']);
  console.log(stu1);
  stu1.sayHi();
  console.log(stu2);
  stu2.sayHi();

八.new

  1. 创建一个空的对象Object;{}
  2. 让构造函数中的this指向当前对象
  3. 执行构造函数
  4. 返回这个对象(return);

九.this

  1. 在函数中 -----> 指向winndow;
     function fn(){
         console.log(this); //window
     }
     fn();
  1. 在方法中 -----> 指向当前方法创建的对象;
     var stu = {
     name:'keke',
     age:18,
     sex:'男',
     sayHi:function(){
         console.log(this.name+'hello');
         console.log(this); //stu这个方法,包括里面所有的内容
     }
     }
     console.log(stu);
     stu.sayHi();
  1. 在构造函数中 -----> 指向构造函数创建的对象;
  function Student(name,age,sex){
      this.name = name;
      this.age = age;
      this.sex = sex;
      this.sayHi = function(){
          console.log(this.name+':hello');
          console.log(this); // Student 这构造函数创建的方法
      }
  }
  var stu1 = new Student('张三',18,'男');
  console.log(stu1);
  stu1.sayHi();

十.遍历对象和删除对象

 // 1.遍历对象
 // 访问对象的属性: obj.name / obj['name']
       var obj = {
           name: 'keke',
           age: 18,
           sex: '男',
           sayHi: function(){
               console.log(this.name+':hello');
           }
       }
       console.log(stu);
  // for in
       for(var key in obj){
           console.log(key+'----->'+obj[key]);
       }

  // 动态添加对象
       var kk = {};
       for(var i = 0;i < 7; i++){
           kk['a'+i] = i;
       }
       console.log(kk);

       for(var key in kk){
           console.log(key+':'+kk[key]);
       }

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

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,733评论 0 38
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,114评论 0 13
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,096评论 0 21
  • 郁闷 自心底蔓延 为什么 不能一次只做一件事 人的心原来一直都在一心二用 对什么事都是三心二意 还有什么意义可言 ...
    墨兰molan阅读 149评论 1 2
  • 本周读经内容: 《庄子》逍遥游第二 《易经》丰卦第五十五,旅卦第五十六,巽 卦第五十七 《诗词启蒙》第160~1...
    陈惠Cherry阅读 148评论 0 2