MathAPI(最大小值,随机数),Date对象,DateAPI,错误对象,函数对象-10

2016-09-01-day10 am


MathAPI

1.最大值和最小值:
Math.max(值1,值2,...); //获得给定值中的最大值
Math.min(值1,值2,...); //获得给定值中的最小值

问题: max和min不支持数组参数
解决: Math.max.apply(null,arr)
获得arr中的最大元素

2.随机数:
Math.random()  //返回0<=r<1之间的一个随机小数。  
Math.floor(Math.random()\*(max+1)); //在0~max之间取随机整数 
Math.floor(Math.random()\*(max-min+1)+min) //在min~max之间取随机整数

Date: 封装一个时间点,并提供操作时间的API的对象

日期对象的原理: 日期对象中封装的是一个从1970年1月1日0点至今的毫秒数。

  • 何时使用: 只要存储日期或时间,或者要对时间进行计算时。
  • 如何使用:
    创建: 4种:
    1). 创建一个日期对象,自动获得客户端当前操作系统时间:
 var now=new Date(); //Mon May 20 2019 14:10:31 GMT+0800 (中国标准时间)

2). 创建一个日期对象,并封装自定义时间:
var date = new Date("yyyy/MM/dd hh:mm:ss");
var date = new Date(yyyy,MM-1,dd,hh,mm,ss);

new Date('2019/05/14 18:00:00');//Tue May 14 2019 18:00:00 GMT+0800 (中国标准时间)
 3). **复制一个日期对象:** 
   为什么:今后,日期对象的计算,都直接修改原日期对象。计算后,原日期无法保留。
   何时: 只要要求同时保留计算前后的两个时间时,都要先复制原时间,再用副本计算新时间。   
   如何: var date1=new Date("xxx")
         var date2=new Date(date1);

4). 将毫秒数转化为当地时间:
为什么: 系统中存储时间,都是使用毫秒数
何时: 只要将毫秒数转为当地时间显示
如何: var date=new Date(111585555);
5). 将标准时间转换成毫秒数:

1.Date.now() 方法返回自1970年1月1日 00:00:00 UTC到当前时间的毫秒数(获取当前时间)

2.getTime 方法的返回值一个数值,表示从1970年1月1日0时0分0秒距离该日期对象所代表时间的毫秒数

3.Date.parse() 方法解析一个表示某个日期的字符串,并返回从1970-1-1 00:00:00 UTC 到该日期对象(该日期对象的UTC时间)的毫秒数


Date API:

1.分量: FullYear(年份), Month(月份), Date(一个月中的第几天), Day(一周中的第几天), Hours(小时), Minutes(分钟数), Seconds(秒数), Milliseconds(毫秒数)
  1. 每个分量都有一对儿getXXX/setXXX方法
    getXXX方法负责获取分量的数值
    setXXX方法负责将新值更新到分量
    强调: set可自动调整时间进制
    特殊:Day 星期,没有set
  2. 年月日星期,都是单数,不带s
    时分秒毫秒,都是复数,带s
  3. 返回值:(取值范围)
    除了月中的日(Date),是从1开始到31结束
    其余都是从0开始,到进制-1结束
    比如:
    Month: 0~11 在赋值或取值时都要修正
    Date: 1~31
    Hours: 0~23
    Minutes/Seconds: 0~59
    Day: 0~6 日,一,二,...,六 不用修正


2.计算:

1). 两日期对象可相减,结果毫秒差
2). 对任意分量做加减:3步:
1. 取分量: date.getXXX();
2. 做加减:
3. set回去: date.setXXX(n)
简写: date.setXXX(date.getXXX()+n)

3.日期转字符串:

date.toString() 转为当地时间的完整格式
date.toLocaleString() 转为当地时间的简化版格式
date.toLocaleDateString() 转为当地时间的简化版格式,仅保留日期部分
date.toLocaleTimeString() 转为当地时间的简化版格式,仅保留时间部分
date.toGMTString() 转为国际标准时间(0时区)


pm


1. 错误处理:

  • 错误: 程序在执行过程中遇到的异常中断。 当发生错误时,程序会报错,退出。
  • 错误处理: 即使发生错误,也保证程序不中断退出的机制。
  • 如何:
   try{
    可能发生错误的正常逻辑
  }catch(err){
    只有发生错误时才执行的错误处理代码:  
    //包括: 1. 记录日志: 
          //2. 提示用户
          //3. 保存数据
  }finally{
    //无论是否出错,都一定会执行的代码
    //包括: 释放内存
  }

以下是一个简单例子,num.toFixed(d),js中有规定d的范围是0~100,否则会报参数超范围错误。


var n=parseFloat(
  prompt("输入四舍五入的数字")
);
var d=prompt("输入小数位数");

try{
  alert(n.toFixed(d));
}catch(err){
  //alert(err);
}finally{
  n=null; d=null;
  alert("释放资源");
}

其中err:
一旦try中的程序发生错误,js会自动创建一个Error类型的对象。

Error:专门封装错误信息的对象。

6种:
SyntaxError: 语法错误
ReferenceError: 引用错误,要使用的变量,或对象,没找到。
TypeError: 类型错误,指错误的使用了类型的方法。
RangeError: 参数超范围

URIError,EvalError (少见)

如果可以提前预知错误的原因,就可用if...else...代替try catch
比如刚刚的例子可以这样修改

var num=parseFloat(prompt("输入数字"));
var d=prompt("输入小数位数");
if(d>=0&&d<=20){//try{
  var r=num.toFixed(d);
  console.log(r);
}else{//}catch(err){
  alert("小数位数必须介于0~20之间");
  //console.log(String(err));
}
console.log("程序继续执行...");

判断浏览器兼容性:(也可用if...else代替)

  try{
   new XMLHttpRequest();
   提示: 支持Ajax
  }catch(){
   提示: 不支持Ajax
  }

笔试题: try catch中的return(略)
如果finally中有return,则使用finally中的return返回
如果finally中没有return,try中的return,会先获得要返回的值,但挂起,暂不返回。要等待finally中代码执行完,才返回。

主动抛出错误:
何时: 当API的开发者,向API的调用者提示错误时。
如何抛出: throw new Error("信息")

//定义者:甲
function round(num,d){
  //!isNaN能判断一个值是不是数字
  if(!isNaN(num)&&!isNaN(d)){
    return Math.round(num*Math.pow(10,d))
            /Math.pow(10,d);
  }else{
    throw new Error("孙子,参数必须是数字!");//红色警告 程序退出
  }
}
//调用者:
while(true){
  var num=prompt("输入数字");
  var d=prompt("输入小数位数");
  try{ console.log(round(num,d));
  }catch(err){ alert(err) }//保证不会有红色警告
}

2.Function: js中的一切函数都是一个对象

创建函数: 3种:
1. 声明方式:
function 函数名(参数列表){
  函数体;
  return 返回值;
}  //被声明提前(hoist)

其中:function是创建一个新函数的意思。函数其实是一个对象
函数对象中封装的不是数据,而是代码段。函数名仅是引用函数对象的普通变量
以下是一个练习声明提前的例子

console.log(fun()); //输出什么?
function fun(){return 1};
console.log(fun());//输出什么?
function fun(){return 2};
var fun=100;
console.log(fun());//输出什么?

当js自动将其声明提前之后会发生什么变化,所有var声明的变量和function声明的函数会被声明提前,赋值留在原地

function fun(){return 1};//创建函数对象,将地址保存在变量fun中
function fun(){return 2};//创建一个函数对象,将地址保存在变量fun中
var fun;//啥都没干
console.log(fun());
console.log(fun());
fun=100;//fun的类型由函数变成了数字
console.log(fun());
2. 函数直接量:
var 函数名=function(参数列表){...}

不会被声明提前。
何时: 如果不希望函数定义被提前时,就必须用直接量。
同上一个简单例子

console.log(fun()); //直接报错,因为声明提前后未定义,undefined后不可以加()
var fun=function(){return 1};
console.log(fun());
var fun=function(){return 2};
var fun=100;
console.log(fun());

更改顺序后又是什么结果?

var fun=function(){return 1};
console.log(fun()); //1
var fun=function(){return 2};
console.log(fun());//2
var fun=100;
console.log(fun());//报错
3. 用new:
var 函数名= new Function("参数名1",...,"函数体")

何时: 如果函数的参数名和函数体可能在运行时动态生成。
以下是一个用这个方法写的自定义排序法。(此种方法实际不用,面试题会考)

//function cmp(a,b){return a-b};
//var cmp=function(a,b){return a-b};
var cmp=
new Function('a','b',"return a-b");
var arr=[2,12,3,23,123];
console.log(arr.sort(cmp));
***重载(overload): 相同函数名,不同参数列表的多个函数,在调用时,可根据传入的参数不同,自动选择对应的函数执行。
  • 为什么: 为了减少函数的个数,减轻使用者的负担。
  • 如何: js中默认不支持重载的语法
  • 变通: arguments对象
var checkout=function(          ){
          //arguments[ , , , ...]
  //如果0个参数
  if(arguments.length==0){
    console.log("微信支付");
  }else if(arguments.length==1){
    //否则,如果1个参数
    console.log("现金支付");
  }else{//否则
    console.log("刷卡支付");
  }
}

checkout();
checkout(100);
checkout("xxxx xxxx xxxx","123456");

定义一个add函数,使用arguments对象计算该方法接收到的所有参数的算术和。

function add(){
  //遍历arguments中每个参数,同时声明变量sum为0
  for(var i=0,sum=0;
      i

函数中自动创建的,接收所有传入函数的参数值得类数组对象。
类数组对象: 长的像数组的对象vs 数组:
相同:
1). 用下标访问元素
2). length属性
不同: 不是数组类型,无法使用数组类型的API。

你可能感兴趣的:(MathAPI(最大小值,随机数),Date对象,DateAPI,错误对象,函数对象-10)