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<arguments.length;
      sum+=arguments[i++]);
    //将当前参数值累加到sum上
  //(遍历结束)
  return sum;//返回sum
}
console.log(
  add(1,2,3,4),//10
  add(1,2,3,4,5,6)//21
);

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

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

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,212评论 0 4
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,744评论 0 38
  • 几门课的老师跟约好似的 齐刷刷 礼拜四考试 (゚Д゚≡゚Д゚) 我现在爱上了民族餐厅的茄子 感觉好好吃 (。⊙౪ ...
    嘿帅气的昵称阅读 155评论 0 0
  • 用户的登录注册案例用户的 数据 应该存在数据库中 1:在day01数据库中 创建一个表 users表 用户表存储...
    冰天雪地_6409阅读 173评论 0 0
  • 前几天在优酷上看了一部电影《驴得水》,很精彩,也很值得思考,于是决定写下观后感。 电影的场景和人物都很简单,但是故...
    最好的安排007阅读 587评论 1 0