脚本语言
HTML/CSS标记语言–描述类语言
JS脚本语言–编程类语言
**浏览器分成两部分:渲染引擎和JS引擎
JS语法工业标准
。JS有三种书写位置:行内、内嵌和外部
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!--2.内嵌式JS-->
<script>
// alert("沙漠骆驼")
</script>
<!--3.外部js,script双标签-->
<script src="my.js"></script>
</head>
<body>
<!--1.行内式的JS,直接写到元素的内部-->
<!-- <input type="button" value="唐伯虎" onclick="alert('秋香姐')"> -->
</body>
</html>
<script>
alert("沙漠骆驼")
</script>
<script src="my.js"></script>
//
,快捷键:ctrl+/
/* */
,默认快捷键:Shift+Alt+A
;vScode可以修改快捷键为了方便新的输入输出,JS中提供了一些输入输出语句,其常用的语句如下:
方法 | 说明 | 归属 |
---|---|---|
alert(msg) | 浏览器弹出警示框 | 浏览器 |
console.log(msg) | 浏览器控制台打印输出信息 | 浏览器 |
prompt(info) | 浏览器弹出输入框,用户可以输入 | 浏览器 |
容器
,我们通过变量名
获取数据,甚至数据可以修改变量在使用时分为两步:1.声明变量;2.赋值
var age; //声明一个名称为age的变量
var
是一个JS关键字,用来声明变量(variable变量的意思),使用该关键字声明变量后,计算机会自动为变量分配内存空间,不需要程序员管age = 10; //给age这个变量赋值为10
=
用来把右边的值赋给左边的变量空间中,此处代表赋值的意思var age = 18; //声明变量同时赋值为18
声明一个变量并赋值,称之为变量的初始化
var age = 18;
age = 81; //最后的结果就是81因为18被覆盖掉了
var age = 18,
address = ‘火影村’,
gz = 2000;
情况 | 说明 | 结果 |
---|---|---|
var age;console.log(age); | 只声明,不赋值 | undefined |
console.log(age) | 不声明不复制,直接使用 | 报错 |
age = 10;console.log(age); | 不声明,只赋值 | 10 |
严格区分大小写
,var app;和var App;是两个变量不能以数字开头
,18age是错误的不能是关键字
、保留字,例如:var、for、while弱类型
或者说动态语言
var age = 10; //这是一个数字型
var areYouOK = ‘是的’; //这是一个字符串
根据=右边变量值的数据类型来判断
的,运行完毕之后,变量就确定了数据类型var x = 6; //x为数字型
var x = ‘Bill’; //x为字符串型
简单数据类型 | 说明 | 默认值 |
---|---|---|
Number | 数字型,包含整型值和浮动型值,如21,0.21 | 0 |
Boolean | 布尔值类型,如true、false,等价于0和1 | false |
String | 字符串类型,如“张三”,注意咱们js里面。字符串都带引号 | “” |
Undefined | var a;声明了变量a但是没有给值,此时a=undefined | undefined |
Null | var a = null;声明了变量a为空值 | null |
0
表示八进制0x
表示十六进制数字范围
数字.MAX_VALUE
数字.MIN_VALUE
数字型三个特殊值
isNaN()
双引号
和单引号
外双内单,外单内双
)转义符 | 解释说明 |
---|---|
\n | 换行符,n是newline的意思 |
\ | 斜杠\ |
’ | '单引号 |
" | "双引号 |
\b | 空格,b是blank的意思 |
\t | tab缩进 |
length
属性可以获取整个字符串的长度var str = 'my name is Amy';
console.log(str.length); //14
console.log('沙漠'+'骆驼');//沙漠骆驼
console.log('Amy'+18); //Amy18
console.log('Amy'+true); //Amytrue
console.log(12+12); //24
console.log('12'+12); //1212
数值相加,字符相连
弹出一个输入框(prompt),让用户输入
把用户输入的值用变量保存起来(程序内部处理)
使用alert语句弹出警示框(输出结果)
案例:显示年龄
<script>
// 弹出一个输入框(prompt),让用户输入
// 把用户输入的值用变量保存起来(程序内部处理)
// 使用alert语句弹出警示框(输出结果)
var age = prompt('请输入你的年龄:');
var str = '您今年已经' + age + '岁了';
alert(str);
</script>
var flag = true;
var flag1 = false;
console.log(flag+1); //2
console.log(flag1 + 1); //1
//声明未赋值:undefined
var str;
console.log(str); //undefined
//undefined
var variable = undefined;
console.log(variable + 'Amy'); //undefinedAmy
console.log(variable + 1); //NaN,非数字
//null空值
var x = null;
console.log(x + 'Amy'); //nullAmy
console.log(x + 1); //1
typeof
可以用来检测变量的数据类型 <script>
var num = 10;
console.log(typeof num); //number
var str = 'Amy';
console.log(typeof str); //string
var flag = true;
console.log(typeof flag); //boolean
var vari = undefined;
console.log(typeof vari); //undefined
var timer = null;
console.log(typeof timer); //object
//prompt取过来的值是字符型的
var age = prompt('请输入您的年龄:');
console.log(age);
console.log(typeof age);
</script>
方式 | 说明 | 案例 |
---|---|---|
toString() | 转成字符串 | var num = 1;alert(num.toString()); |
String()强制转换 | 转成字符串 | var num = 1;alert(String(num)); |
加号拼接字符串 | 和字符串拼接的结果都是字符串 | var num = 1;alert(num+“我是字符串”); |
方式 | 说明 | 案例 |
---|---|---|
parseInt(string)函数 | 将string类型转换成整数数值型 | parseInt(‘78’) |
parseFloat(string)函数 | 将string类型转换成浮点数值型 | parseInt(‘78.21’) |
Number()强制转换函数 | 将string类型转换成数值型 | Number(“12”) |
js隐式转换(- * /) | 利用算术运算隐式转换为数值型 | ‘12’ - 0 |
<script>
// var age = prompt("请输入年龄:");
//1.parseInt(变量) 可以把字符型转换为数字型,得到的是整数
// console.log(parseInt(age));
console.log(parseInt('3.14')); //3
console.log(parseInt('120px')); //120会去掉单位
console.log(parseInt('rem120px')); //NaN
//2.parseFloat(变量) 可以把字符型转换为数字型,得到的是小数,浮点数
console.log(parseFloat('3.14')); //3.14
console.log(parseFloat('120px')); //120会去掉单位
console.log(parseFloat('rem120px')); //NaN
//3.利用Number(变量)
var str = '123';
console.log(Number(str)); //123
console.log(Number('12')); //12
//4.利用算术运算 - * /隐式转换
console.log('12' - 0); //数字型12
console.log('123' - '120'); //数字型3
</script>
方式 | 说明 | 案例 |
---|---|---|
Boolean()函数 | 其他类型转成布尔值 | Boolean(‘true’); |
<script>
console.log(Boolean('')); //false
console.log(Boolean(0)); //false
console.log(Boolean(NaN)); //false
console.log(null); //false
console.log(undefined); //false
console.log('---------------------------------------');
console.log(Boolean('123')); //true
console.log(Boolean('你好吗'));//true
console.log(Boolean('我很好'));//true
</script>
运算符 | 描述 | 实例 |
---|---|---|
+ | 加 | 10+10=20 |
- | 减 | 10-20=-10 |
* | 乘 | 10*20=200 |
\ | 除 | 10/20=0.5 |
% | 取余数 | 返回除法的余数9%2=1 |
var result = 0.1 + 0.2; //结果不是0.3,而是0.300000000000004
console.log(0.07 + 100); //结果不是7,而是:7.000000000000001
所以:不要直接判断两个浮点数是否相等
++num
,就是自加1,类似于num=num+1;先自加1,再返回值num++
,就是自加1,类似于num=num+1;先返回原值,后自加1 <script>
var a = 10;
++a; //11
var b = ++a + 2; //a = 12 ++a = 12
console.log(b); //14
var c = 10;
c++; //c++ = 11,c=11
var d = c++ + 2; //c++ = 11,c=12
console.log(d); //13
var e = 10;
var f = e++ + ++e; // 1.e++ = 10 e = 11 2.e=12 ++e=12
console.log(f); //22
</script>
小结:
运算符名称 | 说明 | 案例 | 结果 |
---|---|---|---|
< | 小于号 | 1<2 | true |
> | 大于号 | 1>2 | false |
>= | 大于等于 | 2>=2 | true |
<= | 小于等于 | 3<=2 | false |
== | 判等号(会转型) | 37==37 | true |
!= | 不等号 | 37!=37 | false |
=== !== | 全等 要求值和数据类型一致 | 37===‘37’ | false |
符号 | 作用 | 用法 |
---|---|---|
= | 赋值 | 把右边给左边 |
== | 判断 | 判断两边值是否相等 |
=== | 全等 | 判断两边的值和数据类型是否完全相同 |
逻辑运算符 | 说明 | 案例 |
---|---|---|
&& | “逻辑与”,简称“与” and | true&&false |
|| | “逻辑或”,简称“或” or | true || false |
! | “逻辑非”,简称“非” not | true |
短路运算的原理:当有多个表达式(值)时,左边的表达式可以确定结果时,就不再继续运算右边的表达式的值
逻辑与:
逻辑或:
//逻辑或短路运算:如果表达式1结果为真,则返回的是表达式1;如果表达式1结果为假,则返回的是表达式2
console.log(123 || 456); //123
console.log(0 || 456); //456
console.log(123 || 456 || 789); //123
赋值运算符 | 说明 | 案例 |
---|---|---|
= | 直接赋值 | var usrName=‘我是值’; |
+=、-= | 加、减一个数后再赋值 | var age = 10;age += 5; // 15 |
*=、/=、%= | 乘、除、取模后再赋值 | var age = 2;age *= 5;// 10 |
优先级 | 运算符 | 顺序 |
---|---|---|
1 | 小括号 | () |
2 | 一元运算符 | ++ – ! |
3 | 算术运算符 | 先* / %,后+ - |
4 | 关系运算符 | > >= < <= |
5 | 相等运算符 | == != === !== |
6 | 逻辑运算符 | 先&& 后|| |
7 | 赋值运算符 | = |
8 | 逗号运算符 | , |
由上到下执行代码的过程中,根据不同的条件,执行不同路径的代码(执行代码多选一的过程),从而得到不同的结果
if语句:
//条件成立执行代码,否则什么也不做
if (条件表达式) {
//条件成立的执行的代码语句
}
if else语句(双分支语句):
if (条件表达式) {
//执行语句1
} else {
//执行语句2
}
if else if语句(多分支语句):
if(条件表达式1){
//语句1;
}else if(条件表达式2){
//语句2
}else if(条件表达式3){
//语句3
}else{
//语句4
}
条件表达式 ? 表达式1 : 表达式2
var time = prompt('请输入一个0-59的数字');
var result = time < 10 ? '0' + time :time;
alert(result);
switch语句也是多分支语句,他用于基于不同的条件来执行不同的代码。当要针对变量设置一系列的特定值的选项时,就可以使用switch。
语法结构:
switch(表达式) {
case value1:
执行语句1;
break;
case value2:
执行语句2;
break;
…
default:
执行最后的语句;
}
执行思路:利用表达式的值与case后面的值相匹配,匹配上了就执行case里面的语句;如果都没有匹配上,就执行default里面的语句
注意事项:
1.开发里表达式的值通常写变量
2.num的值和case里面的值匹配的时候是全等:必须是值和数据类型一样才行
3.如果case里面没有写break,就不会退出switch,是继续执行下一个case
在js中,主要有三种类型的循环语句:
在程序中,一组被重复执行的语句被称之为循环体,能否继续重复执行,取决于循环的终止条件,由循环体及循环的终止条件组成的语句,被称之为循环语句
for (初始化变量;条件表达式;操作表达式) {
//循环体
}
for (var i=1; i <= 100; i++){
console.log(‘你好’);//循环体
}
//1.首先执行里面的计数器变量 var i=1.此句整个过程只执行一次
//2.去i<=100来判断是否满足条件,如果满足条件就去执行循环体 不满足条件退出循环
//3.最后去执行i++ i++是单独写的代码 递增 第一轮结束
//4.接着去执行i<=100 如果满足条件 就去执行循环体
断点调试
断点调试可以帮我们观察程序的运行过程
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
var sum = 0;
for(var i = 1 ; i <= 100 ; i++){
sum = sum + i;
}
console.log(sum);
</script>
</head>
<body>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
//1.求1-100之间所有数的平均值
var sum = 0;
var average = 0;
for(var i = 1 ; i <= 100 ; i++){
sum += i;
}
average = sum / 100;
console.log(average);
//2.求1-100之间所有偶数和奇数的和
var even = 0;
var odd = 0;
for(var i =1; i <= 100; i++){
if(i % 2 == 0){
even = even + i;
}else{
odd = odd + i;
}
}
console.log('偶数和:'+even);
console.log('奇数和:'+odd);
//3.求1-100之间所有能被3整数的数字的和
var s = 0;
for(var i = 1; i <= 100 ; i++){
if(i % 3 == 0){
s = s + i;
}
}
console.log(s);
</script>
</head>
<body>
</body>
</html>
输入输出学生成绩案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
var num = prompt('请输入班级总人数:');
var sum = 0;//求和变量
var average = 0; //求平均值的变量
for(var i = 1; i <= num; i++){
var score = prompt('请输入第' + i + '个同学的成绩:');
sum = sum + parseFloat(score);//prompt取过来的数据是字符串的,需要转换成数字型
}
average = sum / num;
alert('班级总成绩是' + sum);
alert('班级平均成绩是' + average);
</script>
</head>
<body>
</body>
</html>
for(外层的初始化变量;外层的条件表达式;外层的操作表达式) {
for(里层的初始化变量;里层的条件表达式;里层的操作表达式){
//执行语句
}
}
外层循环执行一次,里层循环要执行全部
//外层循环执行一次,里层循环要执行全部
for (var i = 1; i <= 3; i++){
console.log('这是外层循环第' + i + '次');
for (var j = 1; j <= 3; j++){
console.log('这是里层循环第' + j + '次');
}
}
//打印n行n列的星星
var rows = prompt('请您输入行数:');
var cols = prompt('请您输入列数:');
var str = '';
for(var i = 1; i <= rows; i++){
for(var j = 1; j <= cols; j++){
str = str + '*';
}
str = str + '\n';
}
console.log(str);
案例2:打印倒直角三角形
<script>
var str = '';
for(var i = 1; i <= 10;i++){ //外层循环控制行数
for(var j = i; j <= 10; j++){ //里层循环打印的个数不一样
str = str + '*';
}
str = str + '\n';
}
console.log(str);
</script>
<script>
var str = '';
for(var i = 1; i <= 10; i++){ //控制行数
for(var j = 1; j <= i; j++){ //控制列数
str = str + '*';
}
str = str +'\n';
}
console.log(str);
</script>
<script>
var str = '';
for(var i = 1; i <= 9; i++){
for(var j = 1; j <= i; j++){
//1 X 2 = 2
str += j + 'x' + i + '=' + i*j + '\t';
}
str = str + '\n';
}
console.log(str);
</script>
//1.while循环语法结构
while(条件表达式){
//循环体
}
//2.执行思路 当条件表达式结果为true,则h执行循环体 ,否则退出循环
//3.里面也有计数器,初始化变量
//4.里面也有操作表达式,完成计数器的更新,防止死循环
do {
//循环体
} while(条件表达式)
var 数组名 = new Array();
var arr = new Array();//创建一个新的空数组
var arr = [];//创建了一个空数组
var arr1 = [1,2,‘Amy’];//数组的初始化
数组下标从0开始
)格式:数组名[索引]
var arr = ['red','green','blue'];
for (var i = 0; i < 3; i++){
console.log(arr[i]);
}
//1.因为数组索引号从0开始,所以i必须从0开始 i<3
//2.输出的时候arr[i],i当索引号来使用
使用
数组名.length
可以访问数组元素的数量(数组长度)
数组的长度是元素个数,不要跟索引号混淆
arr.length动态检测数组元素个数
var arr = ['red','green','blue','Amy'];
console.log(arr.length);
arr.length = 5; //把数组长度改为了5,空值为undefined
console.log(arr);
其中索引号是5的空间没有给值,就是声明变量未给值,默认值就是undefined
var arr = [‘red’,‘green’,‘blue’,‘Amy’];
console.log(arr.length);
arr[4] = ‘pink’;//追加数组元素
arr[0] = ‘yellow’;//替换原来的数组元素
arr = ‘有点意思’;//不要随便给数组名赋值,不然数组元素都会消失
console.log(arr);
//方法1:
<script>
var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
var newArr = [];
var j = 0;
for(var i = 0; i < arr.length; i++){ //筛选出大于10的元素
if (arr[i] > 10){
//新数组应该从0开始存
newArr[j] = arr[i];
j++;
}
}
console.log(newArr);
//方法2:
var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
var newArr = [];
//刚开始newArr.length的长度就是0
for(var i = 0; i < arr.length; i++){ //筛选出大于10的元素
if (arr[i] > 10){
//新数组索引号应该从0开始 依次递增
newArr[newArr.length] = arr[i];
}
}
console.log(newArr);
</script>
<script>
//颠倒数组元素顺序
var arr = ['red','green','blue','white','black'];
var newArr = [];
for(var i = arr.length - 1; i >= 0; i--){
newArr[newArr.length] = arr[i];
}
console.log(newArr);
</script>
<script>
var arr = [5, 4, 3, 2, 1];
for(var i = 0; i < arr.length - 1; i++){ //外层循环管趟数
for(var j = 0; j <= arr.length - i - 1; j++){ //里层循环管每一趟交换次数
if(arr[j] > arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
console.log(arr);
</script>
function
function 函数名(){
//函数体
}
//调用函数
函数名();//调用的时候不要忘记添加小括号
function 函数名(形参1,形参2…){ //在声明函数的小括号里面是
形参
}
函数名(实参1,实参2…); //在函数调用的小括号里面是
实参
参数 | 说明 |
---|---|
形参 | 形式上的参数,函数定义的时候传递的参数,当前并不知道是什么 |
实参 | 实际上的参数,函数调用的时候传递的参数,实参是传递给形参的 |
参数的作用:在函数内部某些值不能固定,我们可以通过参数在调用函数时传递不同的值进去
function getSum(num1,num2) {
console.log(num1 + num2);
}
getSum(1,3);
function getSums(start,end){
var sum = 0;
for (var i = start; i <= end; i++){
sum += i;
}
console.log(sum);
}
getSums(1,100);
//1.多个参数之间用逗号隔开
//2.形参可以看作是不同声明的变量
函数形参和实参个数不匹配问题
参数个数 | 说明 |
---|---|
实参个数等于形参个数 | 输出正确结果 |
实参个数多余形参个数 | 只取到形参的个数 |
实参个数小于形参个数 | 多的形参定义为undefined,结果为NaN |
<script>
function getSum(num1,num2) {
console.log(num1+num2);
}
//1.如果实参和实参个数一致,则正常输出结果
getSum(1,2);
//2.如果实参个数多余形参个数,会取到形参的个数
getSum(1,2,3);
//3.如果实参个数小于实参个数 多余的形参定义为undefined 最终的结果就是NaN
//形参可以看作是不用声明的变量 num2是一个变量但是没有接受值,结果就是undefined
getSum(1);//NaN
</script>
function 函数名() {
// return 需要返回的结果;
}
(1)我们函数只是实现某种功能,最终结果需要返回给函数的调用者函数名(),通过return实现的
(2)只要函数遇到return就把后面的结果返回给函数的调用者 函数名() = return 后面的结果
break:结束当前的循环体(如for、while)
continue:跳出本次循环,继续执行下次循环(如for、while)
return:不仅可以退出循环,还能够返回return语句中的值,同时还可以结束当前的函数体内的代码
arguments
来获取,在JavaScript中,arguments实际上它是当前函数的一个内置对象
所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参
。判断2月的天数案例
<script>
function backDay(year) {
var year = prompt('请输入年份:');
if(isRunYear(year)){
alert('闰年:二月29天');
}else{
alert('平年:二月28天');
}
}
backDay();
function isRunYear(year) {
var flag = false;
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
flag = true;
}
return flag;
}
</script>
var a=b=c=9;//相当于var a=9;b=9;c=9;b和c直接赋值,没有var声明,当全局变量
在JavaScript中,可以使用三种方式创建对象(object)
//利用字面量创建对象
var obj = {
uname:‘张三丰’,
age:18,
sex:‘男’,
sayHi:function(){
console.log(‘hi~’);
}
}
1.里面的属性或者方法我们采取键值对的形式 键 属性名:值 属性值
2.多个属性或方法用逗号隔开
3.方法冒号后面跟的是一个匿名函数
使用对象:
1.调用对象的属性:对象名.属性名:obj.uname
2.另一种调用方法:对象名['属性名']
3.调用对象的方法:对象名.方法名
//利用new Object创建对象
var obj = new Object();//创建了一个空对象
obj.uname = ‘张三丰’;
obj.age = 18;
obj.sex = ‘男’;
obj.sayHi = function(){
console.log(‘hi~’);
}
构造函数语法格式:
function 构造函数名() {
this.属性 = 值;
this.方法 = function() {}
}
new 构造函数名
1.构造函数名字的首字母要大写
2.构造函数不需要return就可以返回结果
3.调用构造函数必须使用new,new一个构造函数,就创建了一个对象
function Star(uname,age,sex) {
this.name = uname;
this.age = age;
this.sex = sex;
this.sing = function(sang){
console.log(sang);
}
}
var ldh = new Star('刘德华',18,'男'); //调用函数返回的是一个对象
// console.log(typeof ldh);
console.log(ldh.name);
console.log(ldh['sex']);
ldh.sing('冰雨');
var zxy = new Star('张学友',19,'男');
console.log(zxy.name);
console.log(zxy.sex);
for (var 变量名 in 对象名) {
console.log(k);//k 变量,输出得到的是属性名
console.log(obj[k]);//obj[k]输出的是属性值
console.log(Math.PI);//一个圆周率
console.log(Math.max(1,99)); //99
console.log(Math.min(2,-1)); //-1
console.log(Math.max(-1,0,‘Amy’));//NaN
console.log(Math.max()); //-Infinity
Math.floor(1.2);//向下取整,1
Math.ceil(1.2);//向上取整,2
Math.abs(-1));//取绝对值,1
四舍五入:
Math.round(1.1); //1
Math.round(1.5); //2
Math.round(-1.1); //-1
Math.round(-1.5); //-1
随机数random()方法
<script>
function getRandom(min,max){
return Math.floor(Math.random() * (max - min + 1)) + min;
}
var random = getRandom(1,10);
while(true) { //死循环
var num = prompt('你来猜?输入1~10之间的一个数字');
if(num > random){
alert('你猜大了');
}else if(num < random){
alert('你猜小了');
}else{
alert('猜对了!');
break;//退出整个循环,结束程序
}
}
</script>
var arr = new Array();//创建一个数组对象
var obj = new Object();//创建了一个对象实例
//1,使用Date
var date = new Date();
console.log(date);
//2.参数常用的写法;数字型 2019, 10, 01 或者字符串型'2019-10-1 8:8:8'
var date1 = new Date('2019-10-1 8:8:8');
console.log(date1);
console.log(date.getFullYear());
console.log(date.getMonth()+1);
console.log(date.getDay());
var year = date.getFullYear();
var month = date.getMonth()+1;
var dates = date.getDate();
console.log('今天是'+year+'年'+month+'月'+dates+'日');
//要求封装一个函数返回当前的时分秒:结构为:08:08:08
function getTime(){
var time = new Date();
var h = time.getHours();
h = h < 10 ? '0' + h : h;
var m = time.getMinutes();
m = m < 10 ? '0' + m : m;
var s = time.getSeconds();
s = s < 10 ? '0' + s : s;
return h + ':' + m + ':' + s ;
}
console.log(getTime());
//1.通过valueOf() getTime()
var date2 = new Date();
console.log(date2.valueOf());//距离1970年1月1日总的毫秒数
console.log(date2.getTime());
//2.简单的写法
var date3 = +new Date();
console.log(date3);
//3.H5新增的 获得总的毫秒数
console.log(Date.now());
代码如下:
function countDown(time) {
var nowTime = +new Date();//返回的是当前时间总的毫秒数
var inputTime = +new Date(time);//返回的是用户输出时间总的毫秒数
var time = (inputTime - nowTime) / 1000;//剩余时间总的毫秒数
var d = parseInt(time / 60 / 60 / 24);//天
var h = parseInt(time / 60 / 60 % 24);//时
var m = parseInt(time / 60 % 60);//分
var s = parseInt(time % 60);//秒
return d + '天' + h + '时' + m + '分' + s + '秒';
}
console.log(countDown('2022-7-22 17:30:00'));
创建数组的两种方式:
检测是否为数组:
instanceof,运算符,可以用来检测是否为数组
var arr = [];
var obj = {};
console.log(arr instanceof Array);//返回true,表示是数组
console.log(obj instanceof Array);//返回为false表示不是数组
Array.isArray(参数):(H5新增的)
console.log(Array.isArray(arr));
添加删除数组元素的方法
方法名 | 说明 | 返回值 |
---|---|---|
push(参数1…) | 末尾添加一个或多个元素,注意修改原数组 | 并返回新的长度 |
pop() | 删除数组最后一个元素,把数组长度减1,无参数没,修改原数组 | 返回他删除的元素的值 |
unshift(参数1…) | 向数组的开头添加一个或更多的元素,注意修改原数组 | 并返回新的长度 |
shift() | 删除数组的第一个元素,数组长度减1无参数,修改原数组 | 并返回第一个元素的值 |
push 是可以给数组追加新的元素(在数组末尾添加一个或多个)
push()参数直接写数组元素就可以了
push完毕之后,返回的结果是新数组的长度
原数组也会发生变化
unshift是可以给数组前面添加新的元素
unshift()参数直接写数组元素就可以了
unshift完毕之后,返回的结果是新数组的长度
原数组也会发生变化
pop()可以删除数组的最后一个元素一次只能删除一个
pop()没有参数
pop完毕之后,返回的结果是删除的那个元素
原数组也会发生变化
shift()可以删除数组的第一个元素,一次只能删除一个
shift()没有参数
shift完毕之后,返回的结果是删除的那个元素
原数组也会发生变化
方法名 | 说明 | 是否修改原数组 |
---|---|---|
reverse() | 颠倒数组中元素的顺序,无参数 | 该方法会改变原来的数组,返回新数组 |
sort() | 对数组的元素进行排序 | 该方法会改变原来的数组,返回新数组 |
//数组排序
var arr1 = [1, 55, 45, 7];
arr1.sort(function(a,b){
//return a - b;//升序的顺序排列
return b - a;//降序的顺序排列
});
console.log(arr1);
方法名 | 说明 | 返回值 |
---|---|---|
indexOf() | 数组中查找给定元素的第一个索引 | 如果存在返回索引号,如果不存在则返回-1 |
lastIndexOf() | 在数组中的最后一个的索引 | 如果存在返回索引号,如果不存在则返回-1 |
var arr = ['red','green','blue','pink','blue'];
console.log(arr.indexOf('blue'));//只返回第一个满足条件的索引号2
console.log(arr.indexOf('yellow'));//找不到返回-1
console.log(arr.lastIndexOf('blue'));//从最后开始查找,找到返回索引号4
console.log(arr.lastIndexOf('yellow'));//找不到返回-1
目标:把就数组里面不重复的元素取出来放到新数组中,重复的元素只保留一个,放到新数组中去重
核心算法:我们遍历旧数组,然后拿着旧数组元素去查询新数组,如果该元素在新数组里面没有出现过,我们就添加,否则不添加
我们怎么知道该元素没有存在?利用新数组indexOf(数组元素),如果返回是-1就说明新数组里面没有该元素
function unique(arr){
var newArr = [];
for(var i = 0; i < arr.length; i++){
if (newArr.indexOf(arr[i]) === -1){
newArr.push(arr[i]);
}
}
return newArr;
}
var demo = unique(['c','a','f','g','e','c','e']);
console.log(demo);
方法名 | 说明 | 返回值 |
---|---|---|
toString() | 把数组转换成字符串,逗号分隔每一项 | 返回每一个字符串 |
join(‘分隔符’) | 方法用于把数组中的所有元素转换为一个字符串 | 返回一个字符串 |
//1.toString()将数组转换为字符串
var arr = [1,2,3];
console.log(arr.toString());//1,2,3
//2.join(分隔符)
var arr1 = ['green','blue','pink'];
console.log(arr1.join());//green,blue,pink
console.log(arr1.join('-'));//green-blue-pink
下面代码有什么问题?
var str= ‘andy’;
console.log(str.length);
按道理来讲基本数据类型是没有属性和方法的,而对象才有属性和方法,但上面代码却可以执行,这是因为js会把基本数据类型包装为复杂数据类型,其执行过程如下:
var temp = new String(‘andy’);//把简单数据类型包装为复杂数据类型
str = temp;//把临时变量的值给str
temp = null;//销毁这个临时变量
字符串的不可变
根据字符返回位置
方法名 | 说明 |
---|---|
indexOf(‘要查找的字符’,开始的位置) | 返回指定内容在原字符串中的位置,如果找不到就返回-1,开始的位置是index索引号 |
lastIndexOf() | 从后往前找,只招第一个匹配的 |
案例:查找字符串中‘abcoefoxyozzopp’中所有o出现的位置以及次数
核心算法:先查找第一个o出现的位置
然后只要indexOf返回的结果不是-1就继续往后查找
因为indexOf只能查找到第一个,所以后面的查找,利用第二个参数,当前索引+1,从而继续查找
var str = 'abcoefoxyozzopp';
var index = str.indexOf('o');
var num = 0;
while(index !== -1){
console.log(index);
num++;
index = str.indexOf('o',index + 1);
}
console.log('o出现的次数:' + num);
var str = 'andy';
console.log(str.charAt(3));//y
for(var i = 0; i < str.length; i++){
console.log(str.charAt(i));
}
console.log(str.charCodeAt(0));//97
方法名 | 说明 | 使用 |
---|---|---|
charAt(index) | 返回指定位置的字符(index字符串的索引号) | str.charAt(0) |
charCodeAt(index) | 获取指定位置处字符的ASCII码(index索引号) | str.charCodeAt(0) |
str[index] | 获取指定位置处字符 | HTML5,IE8+支持和charAt()等效 |
案例:统计出现最多的字符和次数,abcoefoxyozzopp
核心算法:利用charAt(),遍历这个字符串
把每个字符都存储给对象,如果对象没有该属性,就为1,如果存在了就+1
遍历对象,得到最大值和该字符
var str = 'abcoefoxyozzopp';
var o = {};
for(var i = 0;i < str.length; i++){
var chars = str.charAt(i);//chars是字符串的每一个字符
if(o[chars]){//得到的是属性值
o[chars]++;
}else{
o[chars] = 1;
}
}
console.log(o);
//遍历对象
var max = 0;
var ch = '';
for(var k in o){
//k得到的是属性名
//o[k]得到的是属性值
if(o[k] > max){
max = o[k];
ch = k;
}
}
console.log(max);
console.log('最多的字符是:'+ch);
方法名 | 说明 |
---|---|
concat(str1,str2,str3…) | concat()方法用于连接两个或多个字符串,拼接字符串,等效于+,+更常用 |
substr(start,length) | 从start位置开始(索引号),,length取得个数,重点记住这个 |
slice(start,end) | 从start的位置开始,截取到end的位置,end取不到(他们俩都是索引号) |
substring(start,end) | 从start的位置开始,截取到end位置,end取不到买几本和slice相同,但是不接受负值 |
替换字符:replace(‘被替换的字符’,‘替换的字符’),他只会替换第一个字符
字符串转换为数组:split(‘分隔符’)
toUpperCase():转换大写
toLowerCase():转换小写
<script>
//获取url?之后的内容
var url = 'http://www.itheima.com.login?name=zs&page=18&a=1&b=2';
var index = url.indexOf('?') + 1; //找到?,从后面开始截取
console.log(url.substr(index));//name=zs&page=18&a=1&b=2
//获取url后面的参数
function getParams(url){
//获取?后面第一个字符的索引
var index = url.indexOf('?')+1;
//url中?后面的字符串
var params = url.substr(index);
//使用&切割字符串。返回一个数值
var arr = params.split('&');//返回了一个列表形式
var o = {};
//数组中每一项的样子 key=value
for(var i = 0; i < arr.length; i++){
var tmpArr = arr[i].split('=');
var key = tmpArr[0];
var value = tmpArr[1];
o[key] = value;
}
return o;
}
var obj = getParams(url);
console.log(obj);
</script>