2.7变量、内存、Math和Date的初级认识

1、变量
(1)变量的提升
  引例:①.console.log(num1); 报错:没有定义
     ②.console.log(num1); undefind
      var num1=6;
   原因:javascript引擎的工作方式:先解析代码,获取所有被声明的变量。所有的变量的声明语句,都会被提升到代码的头部
   ps:变量提升只对var命令声明的起作用
(2)变量的作用域
   没有用var声明的写在函数内部的全局变量,只有在该函数被执行时,才是全局变量
   例:① if(ture){var aa='bb'; } console.log(aa);//结果是bb.
     ② for(var i=0;i<100;i++){//...} console.log(i);结果:100
       改写成varj=0; while(j<100){//... j++} console.log(j); 结果:100
       因:if/for声明的是全局变量
(3)一等公民
   js中的函数与其他数据类型(数字,字符串,布尔值等)处于同等地位,可以使用其他函数的地方就能使用函数
   例如:赋值、传参、作为返回结果等
   将函数赋值给变量:
   var func1 = function(){};

   将函数赋值给对象的属性:
   var people = { ability:null };
    people.ability = function(){console.log("吃");};
    people.ability();//吃

    将函数作为参数传入其他函数:
    function introduce(Func){Func();}
    function sayHello(){console.log(“hello”);}
    introduce(sayHello);//hello

   将函数作为函数的结果返回
    function jiSuan(){ return sum(4,10);}
    function sum(num1,num2){ return num1+num2; } console.log(jiSuan());//14

(4)函数名的提升

  只有function命令声明的函数才会出现该现象
  qiuHe(1,2);
  function qiuHe(a,b) { console.log(a+b); }//3
  ////////////////////
  qiuHe(1,2);
  var qiuHe = function(a,b){ console.log(a,b); };//qiuHe is not a function
(5)函数内的变量提升
  在函数作用域中,var命令声明的变量,不管在什么位置,变量声明都会被提升到函数体的头部
  总结:
  作用域之间相互独立,一个作用域中创建的局部变量不能在另一个作用域中生效(一个变量一个作用域)
(6)*(了解)函数参数的默认值
  function func(num){
  (num!==undefind&&num!==nul)?num=num:num=1;
  return num;
  }
  三目运算符和逻辑判断,实现了当函数参数没有传值的时候给参数赋初值
2.内存
(1)【值传递】和【地址传递】
  原始数据类型(数值、字符串、布尔值)的内容传递方式是传递
  而复合数据类型(数组、对象、其他函数)的内容传递是地址传递
(2)函数的同名参数
  若函数有同名的参数,则取最后出现的那个参数值
  若有两个参数,却只提供了一个参数则第二个参数变为了undefind
(3)argument对象
  argument对象包含了函数【运行时】的所有参数,能读能写
  argument[0]就是函数的第一个函数,argument[1]是第二个,依次类推
  只有在【函数内部】才可以使用
  ps:虽然argument很像数组,但它是一个对象
(4)eval函数
  eval()函数,将字符串当作语句来执行
  语法:eval(string)
  【注】只接受【原始字符串】作为参数,若string不是原始字符串,则该方法将不作任何改变的返回
  例:
  eval('var num = 100;');
  console.log(num);// 100
(5)instanceof类型检测
  用来判断一个变量是否是某个对象的实例,结果为ture||false(typeof检测是是什么类型)
(6)JS垃圾回收机制
3、Math对象(JS内置对象)
  Math对象不是构造函数,所以不能生成实例,故所有属性和方法必须在Math对象本身上调用
  ps:提供了一系列的数学常数(属性)和数学方法
(1)Math对象属性:Math对象的属性表示只读的数学常数(随用随查)
  例:Math.E 常数e
  Math.PI π的值
(2)Math对象的方法
  【Math.round()方法】:(依据参数的绝对值)四舍五入
  【Math.floor()方法】:返回小于参数值的最大整数(向下取整)
  【Math.ceil()方法】:返回大于参数的最小整数
  【Math.max()方法】:返回最大的参数
  【Math.min()方法】:返回最小的参数
  【Math.ramdom()方法】:返回0~1之间的一个伪随机数
  ps:可能等于0,但一定小于1
  其他补充:
  【三角函数方法】
    Math.sin方法返回参数的正弦
    Math.cos方法返回参数的余弦
    0Math.tan方法返回参数的正切。
    Math.asin方法返回参数的反正弦
    Math.acos方法返回参数反余弦
    Math.atan方法返回参数反正切

    Math.sin(0) // 0
    Math.cos(0) // 1
    Math.tan(0) // 0

  需要注意的用法:
  ①获取min~max之间的值(不包括max)
    function getRandomNumber(min, max) {
    return Math.random() * (max - min) + min;
    }
  ②获取min~max之间的值(包括max)
    function getRandomIntNumber(min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
    }

 

4、Date对象
  Date对象是JS提供的日期和时间的操作接口
  JS内部,所有的日期和时间都存储为一个整数。(这个整数是当前时间距离1970年1月1日00:00:00的毫秒数,正负范围为基准时间前后各1亿天)
(1)Date()函数
  可以被Date对象直接调用,返回一个当前日期和 时间的字符串
  ps:无论有没有参数,直接调用Date总是返回当前时间
(2)Date(日期字符串|日期参数)构造函数
  Date对象是一个构造函数,对他使用new命令,返回一个Date对象的实例
  【若不加参数,生成的就是代表当前是时间的对象】
    语法:var date1=new Date();
  【若添加一个日期字符串作为参数,返回字符串对应的时间】
  【若添加日期参数,返回字符串所对应的时间】
    语法:var date2=new Date(year,month,day,hours,minutes,seconds,ms);
  【注】月份下标从0开始,年份和月必须写

  一些其他合法的日期字符串写法
  new Date(datestring)
  new Date("2013-2-15")
  new Date('2013/2/15')
  new Date("2013-FEB-15")
  new Date("FEB, 15, 2013")
  new Date("FEB 15, 2013")
  new Date("Feberuary, 15, 2013")
  new Date("Feberuary 15, 2013")
  new Date("15, Feberuary, 2013")
  Sun Jan 06 2013 00:00:00 GMT+0800 (中国标准时间)

(3)日期运算
  两个日期相减,返回间隔毫秒数;
  两个日期相加,返回连接后的两个字符串;
  结合:setInterval(function(),mstime);定时器来编写限时秒杀活动倒计时
(4)日期对象的get*系列方法
  getTime():返回实例对象距离1970年1月1日00:00:00对应的毫秒数,等同于valueOf方法
  getDate():返回实例对象对应每个月的几号(从1开始)
  getDay():返回星期几,星期日为0,星期一为1,以此类推
  getYear():返回距离1900的年数
  getFullYear():返回四位的年份
  getMonth():返回月份(0表示1月,11表示12月)
  getHours():返回小时(0-23)
  getMilliseconds():返回毫秒(0-999)
  getMinutes():返回分钟(0-59)
  getSeconds():返回秒(0-59)

 

 

 











与其苟延残喘,不如从容燃烧!~
原文地址:https://www.cnblogs.com/ilaozhao/p/6574053.html