alioth/before/cha/06===BPEMR/xi-note-computer/Xi-A-Program/Xi-A1-JavaScript/JS/尚学堂.md
2025-05-30 09:18:01 +08:00

12 KiB
Raw Permalink Blame History

JavaScript

运算符、数据类型和流程循环语句

switch case 采用的是===

default 没有选中的case

String

字符串补全str.padStart(length,"x")

Str.padEnd(length,"x")

函数与对象

1 函数的声明

  • 驼峰命名法

    大驼峰:首字母大写

    小驼峰:首字母小写

function funName(参数){

}

当一个函数声明多次,后面的会覆盖

函数名的提升:所有的函数都会被提升带代码头部

不能再条件语句中声明函数

2函数的属性和方法

内部属性

function getName(){};
getName.name//这里会显示函数的名字

当这样子声明时,不能直接通过函数名调用

let a = function as(){}
a();//正确
as();//报错

3 函数的作用域

全局作用域

局部作用域

4 函数的参数

函数的参数可以省略也可以多缺少的undefined

查看函数有几个参数fun.length

数值,字符串,布尔值不会再函数中改变,这个原始类型,引用类型才会改变

读取参数

arguments只有在函数内部才能出现

(5) 其他

自调用

(function a(){console.log("xsxsxsxs")}())
(function a(){console.log("xsxsxsxs")}()

Eval()将字符串当作语句执行

eval(console.log("Hello World!"));//Hello World!

(6) 闭包

函数嵌套,内部函数调用外部参数

函数变量一直在内存当中(一般函数执行完,变量会被回收,有必报的话,变量会一直存在于内存中)

(7) 对象

let a={
	q:"sx",
	"xsx":"xs"
}
a.q;
a["xsx"];//不能使用a."xsx";


Object.keys(a);//返回key数组
delete obj.p // true删除对象属性

标准库 Math和Date

1Math

Math是 JavaScript 的原生对象,提供各种数学功能。该对象不是构造函数不能生成实例所有的属性和方法都必须在Math对象上调用。

静态属性

Math对象的静态属性提供以下一些数学常数。

Math.E常数e。 Math.LN22 的自然对数。 Math.LN1010 的自然对数。 Math.LOG2E以 2 为底的e的对数。 Math.LOG10E以 10 为底的e的对数。 Math.PI常数 Pi。 Math.SQRT1_20.5 的平方根。 Math.SQRT22 的平方根。

Math.E // 2.718281828459045
Math.LN2 // 0.6931471805599453
Math.LN10 // 2.302585092994046
Math.LOG2E // 1.4426950408889634
Math.LOG10E // 0.4342944819032518
Math.PI // 3.141592653589793
Math.SQRT1_2 // 0.7071067811865476
Math.SQRT2 // 1.4142135623730951

这些属性都是只读的,不能修改。

静态方法

Math对象提供以下一些静态方法。

Math.abs():绝对值 Math.ceil():向上取整 Math.floor():向下取整 Math.max():最大值 Math.min():最小值 Math.max方法返回参数之中最大的那个值Math.min返回最小的那个值。如果参数为空, Math.min返回Infinity, Math.max返回-Infinity。 Math.pow():指数运算 Math.pow方法返回以第一个参数为底数、第二个参数为幂的指数值。 Math.sqrt():平方根 Math.log():自然对数 Math.exp()e的指数 Math.round():四舍五入 Math.random():随机数 返回0到1之间的一个伪随机数可能等于0但是一定小于1。

三角函数方法

Math对象还提供一系列三角函数方法。

Math.sin():返回参数的正弦(参数为弧度值) Math.cos():返回参数的余弦(参数为弧度值) Math.tan():返回参数的正切(参数为弧度值) Math.asin():返回参数的反正弦(返回值为弧度值) Math.acos():返回参数的反余弦(返回值为弧度值) Math.atan():返回参数的反正切(返回值为弧度值)

2 Date

普通函数的用法

Date对象可以作为普通函数直接调用返回一个代表当前时间的字符串。

Date()
// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)"

注意即使带有参数Date作为普通函数使用时返回的还是当前时间。

Date(2000, 1, 1)
// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)"

上面代码说明无论有没有参数直接调用Date总是返回当前时间。

构造函数的用法

Date还可以当作构造函数使用。对它使用new命令会返回一个Date对象的实例。如果不加参数实例代表的就是当前时间。

var today = new Date();

Date实例有一个独特的地方。其他对象求值的时候都是默认调用.valueOf()方法但是Date实例求值的时候默认调用的是toString()方法。这导致对Date实例求值返回的是一个字符串代表该实例对应的时间。

var today = new Date();

today
// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)"

// 等同于
today.toString()
// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)"

作为构造函数时Date对象可以接受多种格式的参数返回一个该参数对应的时间实例。

// 参数为时间零点开始计算的毫秒数
new Date(1378218728000)
// Tue Sep 03 2013 22:32:08 GMT+0800 (CST)

// 参数为日期字符串
new Date('January 6, 2013');
// Sun Jan 06 2013 00:00:00 GMT+0800 (CST)

// 参数为多个整数,
// 代表年、月、日、小时、分钟、秒、毫秒
new Date(2013, 0, 1, 0, 0, 0, 0)
// Tue Jan 01 2013 00:00:00 GMT+0800 (CST)

关于Date构造函数的参数有几点说明。

第一点参数可以是负整数代表1970年元旦之前的时间。

new Date(-1378218728000)
// Fri Apr 30 1926 17:27:52 GMT+0800 (CST)

第二点只要是能被Date.parse()方法解析的字符串,都可以当作参数。

new Date('2013-2-15')
new Date('2013/2/15')
new Date('02/15/2013')
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 Feb 2013')
new Date('15, Feberuary, 2013')
// Fri Feb 15 2013 00:00:00 GMT+0800 (CST)

上面多种日期字符串的写法,返回的都是同一个时间。

第三参数为年、月、日等多个整数时年和月是不能省略的其他参数都可以省略的。也就是说这时至少需要两个参数因为如果只使用“年”这一个参数Date会将其解释为毫秒数。

new Date(2013)
// Thu Jan 01 1970 08:00:02 GMT+0800 (CST)

上面代码中2013被解释为毫秒数而不是年份。

new Date(2013, 0)
// Tue Jan 01 2013 00:00:00 GMT+0800 (CST)
new Date(2013, 0, 1)
// Tue Jan 01 2013 00:00:00 GMT+0800 (CST)
new Date(2013, 0, 1, 0)
// Tue Jan 01 2013 00:00:00 GMT+0800 (CST)
new Date(2013, 0, 1, 0, 0, 0, 0)
// Tue Jan 01 2013 00:00:00 GMT+0800 (CST)

上面代码中不管有几个参数返回的都是2013年1月1日零点。

最后,各个参数的取值范围如下。

使用四位数年份比如2000。如果写成两位数或个位数则加上1900即10代表1910年。如果是负数表示公元前。 月0表示一月依次类推11表示12月。 日1到31。 小时0到23。 分钟0到59。 秒0到59 毫秒0到999。

注意月份从0开始计算但是天数从1开始计算。另外除了日期的默认值为1小时、分钟、秒钟和毫秒的默认值都是0。

这些参数如果超出了正常范围会被自动折算。比如如果月设为15就折算为下一年的4月。

new Date(2013, 15)
// Tue Apr 01 2014 00:00:00 GMT+0800 (CST)
new Date(2013, 0, 0)
// Mon Dec 31 2012 00:00:00 GMT+0800 (CST)

上面代码的第二个例子日期设为0就代表上个月的最后一天。

参数还可以使用负数,表示扣去的时间。

new Date(2013, -1)
// Sat Dec 01 2012 00:00:00 GMT+0800 (CST)
new Date(2013, 0, -1)
// Sun Dec 30 2012 00:00:00 GMT+0800 (CST)

日期的运算

类型自动转换时Date实例如果转为数值则等于对应的毫秒数如果转为字符串则等于对应的日期字符串。所以两个日期实例对象进行减法运算时返回的是它们间隔的毫秒数进行加法运算时返回的是两个字符串连接而成的新字符串。

var d1 = new Date(2000, 2, 1);
var d2 = new Date(2000, 3, 1);

d2 - d1
// 2678400000
d2 + d1
// "Sat Apr 01 2000 00:00:00 GMT+0800 (CST)Wed Mar 01 2000 00:00:00 GMT+0800 (CST)"

静态方法

Date.now()

Date.now方法返回当前时间距离时间零点1970年1月1日 00:00:00 UTC的毫秒数相当于 Unix 时间戳乘以1000。

Date.now() // 1364026285194
Date.parse()

Date.parse方法用来解析日期字符串返回该时间距离时间零点1970年1月1日 00:00:00的毫秒数。

日期字符串应该符合 RFC 2822 和 ISO 8061 这两个标准即YYYY-MM-DDTHH:mm:ss.sssZ格式其中最后的Z表示时区。但是其他格式也可以被解析请看下面的例子。

Date.parse('Aug 9, 1995')
Date.parse('January 26, 2011 13:51:50')
Date.parse('Mon, 25 Dec 1995 13:30:00 GMT')
Date.parse('Mon, 25 Dec 1995 13:30:00 +0430')
Date.parse('2011-10-10')
Date.parse('2011-10-10T14:48:00')

上面的日期字符串都可以解析。

如果解析失败返回NaN。

Date.parse('xxx') // NaN

实例方法

Date的实例对象有几十个自己的方法除了valueOf和toString可以分为以下三类。

to类从Date对象返回一个字符串表示指定的时间。 get类获取Date对象的日期和时间。 set类设置Date对象的日期和时间。

Date.prototype.valueOf()

valueOf方法返回实例对象距离时间零点1970年1月1日00:00:00 UTC对应的毫秒数该方法等同于getTime方法。

var d = new Date();

d.valueOf() // 1362790014817
d.getTime() // 1362790014817

预期为数值的场合Date实例会自动调用该方法所以可以用下面的方法计算时间的间隔。

var start = new Date();
// ...
var end = new Date();
var elapsed = end - start;
get 类方法

Date对象提供了一系列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。 getTimezoneOffset():返回当前时间与 UTC 的时区差异,以分钟表示,返回结果考虑到了夏令时因素。

所有这些get*方法返回的都是整数,不同方法返回值的范围不一样。

分钟和秒0 到 59 小时0 到 23 星期0星期天到 6星期六 日期1 到 31 月份0一月到 11十二月 年份距离1900年的年数

var d = new Date('January 6, 2013');

d.getDate() // 6
d.getMonth() // 0
d.getYear() // 113
d.getFullYear() // 2013

下面是一个例子,计算本年度还剩下多少天。

function leftDays() {
  var today = new Date();
  var endYear = new Date(today.getFullYear(), 11, 31, 23, 59, 59, 999);
  var msPerDay = 24 * 60 * 60 * 1000;
  return Math.round((endYear.getTime() - today.getTime()) / msPerDay);
}
set 类方法

Date对象提供了一系列set*方法,用来设置实例对象的各个方面。

setDate(date)设置实例对象对应的每个月的几号1-31返回改变后毫秒时间戳。 setYear(year): 设置距离1900年的年数。 setFullYear(year [, month, date]):设置四位年份。 setHours(hour [, min, sec, ms])设置小时0-23。 setMilliseconds()设置毫秒0-999。 setMinutes(min [, sec, ms])设置分钟0-59。 setMonth(month [, date])设置月份0-11。 setSeconds(sec [, ms])设置秒0-59。 setTime(milliseconds):设置毫秒时间戳。

这些方法基本是跟get*方法一一对应的但是没有setDay方法因为星期几是计算出来的而不是设置的。另外需要注意的是凡是涉及到设置月份都是从0开始算的即0是1月11是12月。

DOM