JavaScript
PDF文件:Javascript.pdf Html文件:Javascript.html
课前说明
0.1 学习方法及态度
没有学不会的知识,只有不努力的傻子!
学习的过程中很痛苦,不学习的日子是苦难!
0.2 学前准备
- 拒绝二指弹
- 金山打字通,及格线:100/分
- 熟悉Windows中的常用的快捷键
开发工具
0.2.1 浏览器
推荐浏览器:Chrome浏览器
0.2.2 编辑器
VS Code、Atom、Sublime Text、Brackets、WebStorm、Notepad++、HBuilderX、Vim、记事本
推荐编译器:VS Code
0.2.3 注意
学习本课程一定要具备HTML与CSS相关的编程基础;
第一章 JavaScript初识
1.1 JavaScript编程语言
JavaScript一种轻量级的脚本语言,也是一种嵌入式语言,是一种对象模型语言,简称“JS”。
核心语法部分只有两个:
- 基本的语法构造(比如操作符、控制结构、语句);
- 标准库(一系列具有各种功能的对象比如Array、Date、Math等)。
想要实现其它复杂操作和效果,都要依靠宿主环境提供API,目前。已经嵌入JavaScript的宿主环境有多种,最常见的环境就是浏览器,另外还有服务器环境(操作系统)。
1.1.1 JavaScript 现在的意义(应用场景)
JavaScript基本上无所不能。
- 网页特效
- 服务器开发(Node.js)
- 命令行工具(Node.js)
- 桌面程序(Electron)
- App(Cordova)
- 控制硬件-IOT(Ruff)
- 游戏开发(cocos2d.js)
1.2 发展及历史
布兰登·艾奇 10天就把JS搞出来了!
- 1994年Netscape公司推出免费版浏览器
- 1995年微软公司发布IE
- 1995年网景公司为适应市场变化,需要一门专门在浏览器运行的脚本语言,这个任务交给了布兰登,只用了10天就把工作提交了,命名为Live Script,后来为了蹭Sun公司Java的热度,与sun公司合作并临时改名为“JavaScript”,其实与Java半毛钱关系没有。
- 1996年8月,微软模仿JavaScript开发了一种相近的语言,取名叫Jscript,首先内置于IE 3.0
- 1997年7月,ECMA组织发布ECMAScript
- 1998年6月,ECMAScript 2.0发布
- 1999年12月,ECMAScript 3.0发布
- 2007年10月,ECMAScript 4.0草案发布
- 2008年7月终止ECMAScript 3.1发布,不久后改名ECMAScript 5
- 2011年6月,ECMAScript 5.1发布,现在使用最广泛的版本
- 2015年6月,ECMAScript 6正式发布,改名为ECMAScript 2015
- 随后,ECMA组织决定,每发布一个版本,以年号来代替版本号,如ECMAScript 2016、ECMAScript 2017
1.3 ECMAScript与JavaScript
ECMA 欧洲计算机制造联合会
1.4 JavaScript与HTML、CSS
- HTML:提供网页的结构,提供网页中的内容
- CSS:用来样式的排版、美化网页
- JavaScript:可以用来控制网页内容,给网页增加动态效果
1.5 JavaScript学习概况
在学习JS的过程中,需要学习的内容分为两部分,语言结构和宿主环境提供的API
语言结构部分主要是语言规则及内置对象(标准库对象)
而宿主环境的API,根据宿主环境不同而不同,以浏览器为例,最常见的三个类型:浏览器控制类、DOM操作类、网络控制类
第二章 JavaScript入门
2.1 如何写一段JS代码并运行
- 写在行内:
<input type="button" name="btn" value="按钮" onclick="alert(123)" />
- 写在script标签中:
<script>alert(456)</script>
- 写在外部JS文件中引用:
<!--html文件内容,0001.html 且与js文件在同一目录注意:如果使用引入了外部的标签,那么script中不要再写其它js代码,写了也没用使用,外部引入的方式加载js代码时,script内不需要再写代码如果写了不会报错,也不会运行。--><script src="./0001.js"></script>
2.2 变量
2.2.1 什么是变量
- 变量是计算机内存中存储数据的标识符,根据变量名称可以获取到内存中存储的数据
- 使用变量可以方便的获取或者修改内存中的数据
变量就是存储数据的容器
2.2.2 如何使用变量
- 声明变量并赋值:
// 声明一个变量var aa;// 给变量赋值aa = 18;// 声明一个变量并为这个变量赋值var age = 20;var a1 = 12;var b2 = 16;// 一次性声明多个变量并赋值var h1 = 12, h2 = 13, h3 = 15;
- 变量声明的语法规则及注意事项:
// 变量的命名// 变量的名字必须是 数字、字母、下划线和$ 组成// 变量的名字不能以数字开头// 变量的名字不能是关键字 例如,for while if// 建议: 变量名必须有意义var name = "张三";var num = 123;var username = '王五';var age = 45;// 注意:在Js中变量是区分大小写的var Name = "李四";var name = "王五"// 注意:如果变量重名后面的值会将会替换前面的// 变量的命名尽可能使用驼峰法来命名var userName = '赵六';// 简单的练习:以下声明的变量哪些是不合法的var aaa,age18,//18age,不合法 因为数字开头了$names,// names$*,不合法,因为后面带了个*号_sex,sex_,hello234;//小案例:将两个变量的值进行交换var a = 1;var b = 2;var c = a;a=b;b=c;// 弹出结果alert(a);alert(b);
2.3 数据类型
2.3.1 数值和字符串
- 数值与字符串的使用规则:
// var age = 18;// var num = 1.2;// 数值型(number)、字符串(String)、布尔(Boolean)、underFined、null、对象(Object)// 李四在这里不是字符串// var str1 = 李四;// 使用单引号或者双引号引起来的才是字符串var str1 = '李四'// 下面这个“123”是字符串var kk = '123';// 如果在字符串中要使用引号,请加转义字符"\"// var str = '你好,\'我是王大拿!\'';// alert(str);//打印出 我喜欢"学习"'Javascript'var str = '我喜欢\\\"学习\"\'JavaScript\''alert(str);
- 字符串的拼接:
var s1 = '123';var s2 = '456';var s3 = s1+s2;console.log(s3);// 控制台输出“123456”var s4 = 1;console.log(s3+s4);// 控制台输出“1234561”var s5 = 2;// “+”号既可以作为数学运算使用,也可以作为字符串拼接使用/*变量从前往后进行计算,如果两个变量都是数值型,那么“+”号作为数学运行算符号,直到遇到一个字符串,此后所有的“+”号都作为字符串拼接*/console.log(s4+s5+s3); // 控制台输出“3123456”console.log(s3+s4+s5); // 控制台输出“12345612”
2.3.2 其它数据类型
Boolean
- Boolean字面量:true 和 false,区分大小写
- 计算机内部存储:true为1,false为0
Undefined和Null
- Undefined表示一个声明的变量没有赋值,变量只有在声明的时候默认是Undefined
- null表示一个空,空变量的值如果想为null,必须手动设置
Object
大课题,后面详解
2.4 注释
- 单行注释:
// 这是一个单行注释!
- 多行注释:
/*这是一个多行注释无论注释里面写什么东西都不会显示在浏览器在注释里可以写任何东西*/
2.5 数据类型转换
字符串转换
- 数值型转字符串:
var n = 5;var s = n.toString();console.log(typeof s); // 输出 Stringconsole.log(typeof String(n)); // 输出 Stringvar t = '' + n;console.log(typeof t); //输出 String
- 布尔值转字符串:
var bool = true;console.log(typeof bool.toString()); //输出 Stringconsole.log(typeof String(bool)); // 输出 Stringvar t = '' + bool;console.log(typeof t); //输出 String
数值型转换
- 字符串转数值型
var a = '1';var b = Number(a);console.log(b); //输出数值 1console.log(typeof b); //输出类型 number
- 其它数据类型转数值型
var c = Number('c');var d = Number(null);var e = Number(undefined);console.log(c,d,e);//输出 NaN 0 NaN
parseInt()解析函数转换规则
//parseInt():如果第一个字符不能转换为数字,则返回 NaNvar f = parseInt('2');var g = parseInt('k23');var h = parseInt(null);var i = parseInt(undefined);console.log(f,g,h,i);//输出 2 NaN NaN NaN
parseFloat()解析函数转换规则
//parseFloat():如果前面的字符达不到要求,后面的直接不要了,若第一个字不能转换为数字则返回 NaNvar j = parseFloat('1.23df')var k = parseFloat('1.2.3.4.5')var l = parseFloat('h34');var m = parseFloat(null);var n = parseFloat(undefined);console.log(j,k,l,m,n);//输出 1.23 1.2 NaN NaN NaN
布尔类型转换
- 各种数据类型转布尔型
var a = Boolean('0');var b = Boolean(0);var c = Boolean('2');var d = Boolean(null);var e = Boolean(undefined);var f = Boolean('');console.log(a,b,c,d,e,f); // 输出true false true false false false/*a:true,字符串是有内容的b:false,数值型的0为falsec:true,字符串是有内容的d:false,值为空的e:false,值为空的f:false,字符串没内容布尔*/
第三章 JavaScript操作运算符
表达式:值和操作符,运算会有一个结果
同时,表达式的每个数值及部分表达式,又称为子表达式
3.1 算术运算符
//算术运算符有:+-*/%var s1 = 6;var s2 = 3;var s3 = 4;console.log(s1+s2);// 加号,控制台输出9console.log(s1-s2);// 减号,控制台输出3console.log(s1*s2);// 乘号,控制台输出18console.log(s1/s2);// 除号,控制台输出2console.log(s1%s3);// 求余,控制台输出2
3.2 一元运算符
//一元运算符,++ -- 对自身操作加一或减一var n1 = 5;var n2 = 5;var n3 = 5;var n4 = 5;n1++;n2--;++n3;--n4;console.log(n1);// 控制台输出6console.log(n2);// 控制台输出4console.log(n3);// 控制台输出6console.log(n4);// 控制台输出4// 案例一var x = 5;++x; //此时x=6var y = 6;console.log(x+ ++y);//控制台输出13)// 差异案例var i = 5;++i;var j = 6;console.log(i+ j++);//控制台输出12/*差异分析:如果操作符在变量前面,先进行自身的运算,再进行其它运算如果操作符再变量后面,先进行其它的运算,再进行自身运算*/// 案例二var a = 1;var b = ++a + a++;//(2+2)/*a初始值为1++a时,a已经变成2然后再做了个加法运算则为 a+a = 2+2由于是++,所以先进行自身运算再进行其它运算所以b此时的值为4当表达式结束时,运行了一次a++所以a此时的值为3*/console.log(b);// 控制台输出4console.log(a);// 控制台输出3// 案例三var m = 1;var n = m++ + ++m;// (1+3)/*m初始值为1m++时,先给出m=1再运算m++所以“+”前为1,但m实际值已经为2运算++m,则加号后面为++2 = 3等式为 n = 1 + 3则n的值为4,此时m的值为3*/console.log(n);// 控制台输出4console.log(m);// 控制台输出3//案例四var num1 = 1;var num2 = ++num1 + ++num1;// (2+3)/*num1初始值为1++num1时,先运行+1操作所以num1此时的值已经为2加号后面为++a所以也要先运行+1操作a此时的值已经为2,则后面的++a为3所以num2 = 2 + 3,num2值为5此时num1的值为3*/console.log(num2);// 控制台输出5console.log(num1);// 控制台输出3
3.3 逻辑运算符
// && 逻辑与运算符:参与运算的数据必须同时为真,结果为真// || 逻辑或运算符:参与运算的数据只要有一个为真,结果为真// ! 逻辑非运算符:获取相反的结果var a = true;console.log(!a); // 控制台输出falsevar m = 1;var n = 2;var s = 0;// 有值为真,为0则假console.log(m && n);// 控制台输出2console.log(s && n);// 控制台输出0console.log(m || n);// 控制台输出1console.log(m || s);// 控制台输出1// 在Js中逻辑运算的结果是决定整个表达式的子表达式的值// 运算的优先级,如果同时出现,先运算 && 再运算 ||// s && n 为假 输出 0 再运行 m || 0 为真 输出 1console.log(m || s && n);// 控制台输出1
3.4 关系运算符
/*基本: > < >= <=等于:==不等于:!=全等于:===不全等:!==*/var a = '2';var b = 2;// 因为js是一种弱类型语言// 变量的类型存在自动转换// 两个等号只比较值// 三个等号比上数据类型console.log(a == b);// 控制台输出trueconsole.log(a === b);// 控制台输出false
3.5 赋值运算符
// = += -= *= /= %=var a = 1;var b = 1;var c = 5;a = a + 4;b += 4;c -= 2;console.log(a);// 控制台输出5console.log(b);// 控制台输出5console.log(c);// 控制台输出3
3.6 运算符的优先级
// 输出的值是有决定权的变量的值var a = 1;var b = 2;var c = 0;console.log((a || c) && b);// 控制台输出2// 运算优先级从上往下// 1. 优先级最高:()// 2. 一元运算符:++ -- !// 3. 算术运算符(先乘除取余再加减):+ - * / %// 4. 关系运算符:> < >= <=// 5. 相等运算符:== === != !==// 6. 逻辑运算符:&& 和 || 先 && 再 ||// 7. 赋值运算符:=var s = 4 >= 6 || '人' != '哈哈' && !(12*2+3 == 122) && true;/*1.先算括号内的值,结果为false2.再算关系运算符(4>=6),结果为false3.再算相等运算符,结果为true4.得出 s = false || true && true*/console.log(s);// 控制台输出true
第四章 JavaScript语句
程序的三种基本结构:
顺序结构:从上到下执行的代码就是顺序结构,程序是默认从上到下执行的
分支结构:根据不同的情况及判断,执行对应代码
循环结构:重复执行一段代码
4.1 if语句
// 如果2大于1则输出2if (2>1) {console.log(2);}else if(3>2){console.log(3);}else{console.log(1);}// 基本结构/*if>else if>else如果if判断错了,接着运行else i,最后运行elseif(要判断的值){运行的代码块;}else if(要判断的值){运行的代码块;}else{运行的代码块;}*/
4.2 switch-case语句
var ex = 2;switch (ex) {case 1:console.log("1");break;case 2:console.log("2");break;default:console.log("default");break;}// 控制台输出2/*switch语句判断case值是否与switch是否相等,是则运行代码块switch(值){case 值1:运行的代码块;break;case 值2:运行的代码块;break;default:运行的代码块;break;}*/
4.3 while语句与do-while语句
- while语句
var i = 0;while(i<100){console.log(i);i++;}/*执行代码都会重新进行判断如果条件成立,则代码里面的代码块就会一直执行直到条件不成立while (条件) {代码块;}*/
- do-while语句
var i = 10;do{console.log(i);i--;}while(i>0);/*先执行一次代码再看条件成不成立若条件成立继续循环进行若不成立则不继续循环进行do{代码块;}while(条件);*/
4.4 for语句
for(var i = 0;i < 100;i++){console.log(i);}/*for(初始表达式;判断表达式;自增或自减){代码块;}*/
第五章 JavaScript数组
5.1 数组的基本概念
所谓数组,就是将多个同一类型的元素按照一定排序放到一个集合中,那么这个集合就被称为数组
// 数组下标从0开始// 数组的声明var arr = ['a','b','c'];var arr2 = [1,2,3];// 查找数组元素console.log(arr[1]);// 控制台输出b// 字面量方式创建数组var a1 = [];// 这是一个空数组var a2 = [1,2,3,'d'];console.log(a2);/*控制台输出:[1, 2, 3, 'd']0: 11: 22: 33: "d"*/// 构造函数方式创建数组var b1 = new Array(1,3,'h','k');console.log(b1);/*控制台输出:[1, 3, 'h', 'k']0: 11: 32: "h"3: "k"*/// 获取数组长度var l = a2.length;console.log(l);// 控制台输出4// 数组里面能不能有数组?var c1 = [1,4,'k','l']var c2 = [6,7,c1,'t']console.log(c2);/*控制台输出:[6, 7, Array(4), 't']0: 61: 72: Array(4)0: 11: 42: "k"3: "l"length: 4[[Prototype]]: Array(0)3: "t"length: 4能,数组里面又有数组的情况将其称之为多维数组*/// 三维数组,数组的维度是无限的,但是越大越复杂var c3 = [4,c2,'p']console.log(c3);
5.2 数组元素获取
// 数组内容的标号被称为下标,获取的方式 数组名[下标]var d1 = ['red','green','yellow'];console.log(d1[2]);//多维数组怎么查找元素var d2 = ['路飞','娜美',['巴基','小丑',['乔巴','索隆']]];// 小丑,在数组中的3号元素中的数组中的2号元素// 用[]依次填入下标进行查找// 第一个下标为2,第二个下标为1,则如下console.log(d2[2][1]);// 控制台输出“小丑”//同理,查找索隆如下console.log(d2[2][2][1]);// 控制台输出“索隆”
5.3 数组元素遍历
// 将数组里面所有元素挨个打印var e1 = [1,2,3,4,5];var e2 = ['a','b','w','q','y','f'];for(var i = 0;i < e2.length;i++){console.log(e1[i]);console.log(e2[i]);}/*控制台输出:1a2b3w4q5yundefined 未查询到f*/
5.4 数组元素求和
// 将所有的数字相加,打印它们的和var m = [12,26,1,7,8,4];var n = 0;for(var i = 0;i<m.length;i++){n += m[i];}console.log(n);// 控制台输出58
5.5 数组循环遍历
//打印出数组中最大的值xvar x = [12,26,1,7,8,4];var y = 0;for(var i = 0;i < x.length;i++){if(y < x[i]){y = x[i]}}console.log(y);// 控制台输出26//打印出数组中所有的偶数var t = [12,26,1,7,8,4];for(var i = 0;i < t.length;i++){if(x[i] % 2 == 0){console.log(x[i]);// 控制台逐一将偶数输出}}// 将数组元素以竖线 | 分割为一个字符串var u = [12,26,1,7,8,4];var v = '';for(var i = 0;i < u.length;i++){v += u[i]+'|'}console.log(v);//控制台输出 12|26|1|7|8|4|
第六章 JavaScript函数
把一段相对独立的具有特定功能的代码块封装起来,形成一个独立的实体,就是函数,函数的作用就是封装一段代码,使其可以重复使用
6.1 函数的声明与调用
// 关键字声明:function 函数名(){代码;}// 表达式声明:var 函数名 = function(){代码;}// 函数声明完后里面的代码是不会执行的// 如果要执行,必须调用函数// 不管什么情况下,不调用一定不会执行函数function f1(){console.log(2);}// 函数的调用:函数名.();f1();// 控制台输出2f1();// 控制台输出2f1();// 控制台输出2f1();// 控制台输出2//函数调用了4次function s(){var m = 0;var n = 0;while(n <= 100){m += n;// 从1加到100n++;}console.log(m);}s();// 控制台输出5050
6.2 形参与实参
function s(a){var m = 0;var n = 0;while(n <= a){m += n;// 从1加到an++;}console.log(m);}s(100);// 声明:// function fun(形参1,形参2,形参3){//// }// 调用:// fun(形参1,形参2,形参3);// 形参是形式上的参数,是没有实际值的// 形参是在声明函数时写的,多个形参用逗号隔开// 形参的值是不固定的,传入什么值就是什么值// 形参就是一个占位值,他要与实参传入的值一一对应// 实参就是实际的参数,实参在调用时,实际传入函数中的值// 在传入后在函数中,使用形参获取实际的值function fn(a,b){console.log(a+b);}fn(15,78);// 控制台输出93fn(16,88);// 控制台输出104
6.3 函数的返回值
// function f(形参,形参){// 代码;// return 返回值;// }// var re = f(形参,形参) 此时re的值就是函数的返回值function f(a,b){var c = a - b;return c;}var re = f(5,2);console.log(re);// 如果函数中没有return// 那么函数调用之后接到的返回值就是undefined// 如果函数中有return但是return没有值,// 那么函数调用之后接到的返回值也是undefined// 函数中return之后,不管有什么代码,均不执行
6.4 匿名函数与自调用
// 表达式声明函数var fun = function(){console.log(1);}fun();// 控制台输出1// 匿名函数,函数本身是没有名字的// 立即执行函数,自调用的匿名函数(function(){alert(123);})();// 这个函数是没有名字的,窗口弹出123// 作用域:// 防止全局变量的污染,同时可以封装一个局部作用
6.5 函数当作参数
// 函数也是一种数据类型function fn(){}// function 数据类型==>对象(数组、函数)console.log(typeof fn);// 控制台输出functionfunction f1(s){s();// 说明函数准备执行}var f2 = function(){console.log(22233);}f1(f2);// 回调函数:将函数当作值传入一个函数内调用// f2会被当成值传入f1函数内function f3(){var a = 10;var f4 = function(){alert(2);}return f4;// 将函数作为返回值}// 闭包var k = f3();// return 将f4的值返回// var k 接住了f4的值// 此时k的值为f4()为一个函数k();
6.6 作用域与JS代码的运行
作用域:变量可以起作用的范围和领域
6.6.1 作用域
// 只有函数才能制造作用域// 如果函数中又有函数,则可以多一个作用域// 函数外面就是全局作用域var a = 1;// 全局作用域变量// 函数里面就是局部作用域function f1(){var b = 2;// 局部作用域变量}var f2 = function(){var c = 1;}var c = 2;console.log(c);// 控制台输出2
6.6.2 变量提升
console.log(z);// z 还未赋值var z = 2;// 变量提升:// 在代码执行阶段变量已经在编译阶段被声明// JS代码的运行分为两个阶段// 1:解析(编译)阶段:语法检查,变量及函数进行声明// 2:运行阶段:变量的赋值,代码流程的执行// 将代码拆解// var z;// console.log(z);// z// console.log(x);function x(){console.log("aaa");}// 如果函数与变量重名,那么函数会替换变量声明var x = 1;console.log(x);
6.6.3 作用域链
var a = 1;// 全局变量function f1(){function f2(){function f3(){var a = 4;// 局部变量console.log(a);}f3();}f2();}f1();// 作用域链// 当函数中使用某个变量时// 优先在自己的作用域中查找// 如果找不到,就会一直向上一层作用域查找// 直到全局作用域,如果还找不到,直接报错// 这一个过程叫做
第七章 JavaScript对象
7.1 什么是对象
万物皆对象
现实生活中:万物皆对象,对象是一个具体的事物举例:一部车,一个手机一类事物,称之为类,具体的实例是对象对象有个部分,特征和行为如一辆红色的四个轮子的车,能使他驾驶或停车在这里:车的特征:红色,四个轮子车的行为:驾驶或刹车
7.2 JavaScript中的对象
JavaScript中的对象其实就是生活中对象的一个抽象JavaScript的对象是无序属性的集合其属性可以包含基本值、对象、数组或函数对象就是一组没有顺序的值我们可以把JavaScript中的对象想象成键值对,其中的值可以是数据和函数对象的特征和行为:特征---属性行为---方法
事物的特征在对象中用属性来表示
事物的行为在对象中用方法来表示
7.3 对象的声明及使用
// 字面量声明一个对象var obj11= {};// 对象中都是键值成对存在的// 通常来说,值是函数则称之为方法,其它类性的值都是属性var obj12 = {age:12,sg:190,name:'麻瓜',fei:function(){}};// 实例化方式(使用内置的构造函数)var obj12 = new Object();// 自定义构造函数function Fun(){}// 实例化自定义构造函数方式声明对象var f = new Fun();var obj2 = {age:12,sg:190,name:'麻瓜',fei:function(){console.log(3);}};// 获取对象的属性或者方法 对象.属性名console.log(obj2.age);obj2.fei();
7.4 this的用法
// this的指向var obj = {name:'老豆',age:18,fun:function(){// 在方法中的this值的就是这个方法所在的对象var s = this.age;console.log();}}obj.fun();// 控制台输出18// 普通的函数中也是有this的// this 指向全局对象,这个全局对象就是window对象function f(){console.log(this.a);}// this永远指向一个对象// this在什么情况下,什么地方,指向哪个对象?k = '678';function funny(){var k = '891';console.log(this.k);}var o1 = {k:"123",f:funny,}var o2 = {k:"345",f:funny,}o1.f();o2.f();// this 在哪个对象下面,就指向哪个对象var o3 = {age:18,fun:function(){console.log(this.age);}}var o4 = {age:16,fun:o3.fun,}o4.fun();// 控制台输出1 6
7.5 对象的遍历及删除
var o1 = {name:'路飞',age:15,sex:'男'}// 遍历 for...in// for(键 in 对象)// for...in循环不仅可以循环遍历对象,还可以循环遍历数组for(var k in o1){console.log(o1[k]);}// 补充遍历数组var arr = [1,2,3,4,5]for(var k in o2){console.log(o2[k]);}console.log(o1);delete o1.age;// 删除对象属性console.log(o1);
7.6 包装对象
// 包装对象// 三种原始类型的值 数值 字符串 布尔// 原始类型的数据在一定条件下可以自动转为对象// 这就是包装对象var a1 = new Number(123);console.log(a1);// 原始值 可以自动当作对象来调用,可以调用各种属性及方法// 如果包装对象使用完成,会自动立即销毁var a = '456';a.length;console.log(a.length);
7.7 数学对象
// 经常使用的Math对象// Math.abs(); 取绝对值var n = -2;var n2 = Math.abs(n);console.log(n2);// Math.random(); 取随机数// 返回一个浮点,伪随机数在范围[0,1)// 从0往上但是不包括1var r = Math.random();console.log(r);// 随机数用法公式var r2 = Math.random()*10;console.log(r2);// Math.floor(); 使数字向下取整var r3 = Math.floor(r2);console.log(r3);// 获取m-n之间的随机数// Math.random() * (n-m) + m;Math.random() * (8-2) + 2;// Math.random() ×(最大值-最小值)+ 最小值;// 实例:求40-100之间的随机数// 由于随机数排除1,且Math.floor()向下取整// 则最大值应该加1,如100则最大值为101var t = Math.random() * (101-40) + 40;console.log(Math.floor(t));
7.8 日期对象
// 实例化构造函数获取时间对象var date = new Date();console.log(date);// Date.now(); 获取毫秒数console.log(Date.now());// .getHours(); 获取当前小时数console.log(date.getHours());// .getDate(); 获取当前天数console.log(date.getDate());// .getFullYear(); 获取当前年数console.log(date.getFullYear());// .getMouth(); 获取当前月份,从0开始,得加1console.log(date.getMonth()+1);// Js中获取的时间是计算机本地的时间// Js中月份的数字是从
7.9 数组对象
var arr = [1,6,8,4,5,2,4,6];console.log(arr.length);var k = 3;// .push(); 在数组的末尾插入一个元素arr.push(k);console.log(arr);// .pop(); 删除末尾的元素arr.pop();console.log(arr);// .slice(m,n); 返回一个新的数组对象// 由原始数组开始的下标和末尾的下标(不包括末尾)的值组成// 原始数组的内容不会发生改变var arrCopy = arr.slice(2,6);console.log(arrCopy);console.log(arr);// .concat(); 返回一个新的数组对象// 由原始数组使用,用 原始数组.concat();// 在该数组末尾添加新的数组元素// 并且返回一个新的数组,原数组不被改变var kk = ['k','p','l'];var arrKk = arr.concat(kk);console.log(arrKk);// .join(); 将一个数组中(或一个类数组对象)的所有元素连接// 合成一个字符串并且返回这个字符串并且使用分隔符分隔// 括号中可传入分隔符,默认为逗号var s = arr.join();var y = arr.join(';');console.log(arr);console.log(s);console.log(y);
7.10 字符串对象
var s = 'Hello JavaScript!';// console.log(s.length);// .indexOf(字符); 找到字符第一次出现的位置var n = s.indexOf('J');console.log(n);// .substr(m,n); 意思为从m开始截取n个字符var l = s.substr(6,10);console.log(l);// 大小写转换// .toLowerCase; 小写转换// .toUpperCase; 大写转换var i = s.toLowerCase();var j = s.toUpperCase();console.log(i);console.log(j);// .replace();// 返回一个由替换值替换一些或所有匹配模式后的新字符串// 模式可以是一个字符串或一个正则表达式// 替换值可以是一个字符串或者一个每次匹配都要调用的函数// 原始字符串不会改变var x = s.replace('a','k');console.log(x);
