Javascript基础-01

Javascript基础

https://www.w3school.com.cn/js/index.asp

第一章:javascript入门

1.JavaScript 版本

JavaScript 由 Brendan Eich 于 1995 年发明,并于 1997 年成为 ECMA 标准。

ECMAScript 是该语言的官方名称。

从 2015 年起,ECMAScript 按年命名(ECMAScript 2015)。

ECMAScript 版本

版本官方名称描述
1ECMAScript 1 (1997)第一版。
2ECMAScript 2 (1998)只改变编辑方式。
3ECMAScript 3 (1999)添加了正则表达式。添加了 try/catch。
4ECMAScript 4从未发布过。
5ECMAScript 5 (2009)阅读更多:JS ES5添加了“严格模式”。添加了 JSON 支持。添加了 String.trim()。添加了 Array.isArray()。添加了数组迭代方法。
5.1ECMAScript 5.1 (2011)编辑改变。
6ECMAScript 2015阅读更多:JS ES6添加了 let 和 const添加了默认参数值添加了 Array.find()添加了 Array.findIndex()
7ECMAScript 2016添加了指数运算符(**)。添加了 Array.prototype.includes。
8ECMAScript 2017添加了字符串填充。添加了新的 Object 属性。添加了异步功能。添加了共享内存。
9ECMAScript 2018添加了 rest / spread 属性。添加了异步迭代。添加了 Promise.finally()。增加 RegExp。

ECMAScript 通常缩写为 ES。

2. 为什么要学习js?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iIFbNsnL-1647433185529)(javascript从入门到精通.assets\学习js的必要性.png)]

3.hello world

基本语法要求:

区分大小写,语句结束用分号(不是必须的)

3.1 引入js脚本方式1

内联方式,嵌入在html标签里的,缺点:html负责的内容+js是脚本,并没有分离。

我们希望Html和脚本分离的方式,不推荐的

<button type="button" onclick="alert('hello world!')" >hello world</button>
3.2 页面的script脚本

注意:script脚本可以出现在页面的任意位置。一般是两个位置

如果在head标签里,页面执行的过程是这样的,先加载head,这时会加载script并执行脚本,但是body里的html标签还没有加载,页面看到是空白的。

如果位置2,在body或者html结束前,那么页面渲染完毕后,再执行的脚本。这是可以看到页面的内容了

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
        //这里是位置1.
		<script type="text/javascript">
			alert('hello world!')
		</script>
	</head>
	<body>
        
		<button type="button" onclick="alert('hello world!')" >hello world</button>
        //位置2
        <script type="text/javascript">
		  alert('hello world agagin');
    	</script>
	</body>

</html>

3.3 使用外部文件的方式

如果脚本写在script内部,网页里面,那么这个脚本只能是为当前页面使用,其他页面不能用。

为了让其他页面使用,好比,我们写的css样式文件一样。可以写成js脚本文件,然后需要的页面导入即可。

<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../js/hello.js" type="text/javascript" charset="utf-8"></script>
	</head>

4. 运行html文件方式

1. http模式 web模式
http://127.0.0.1:8848/js/lesson1/demo02.html
我们需要web容器,要启动;http 超文本传输协议
127.0.0.1 表示本机的ip地址 可用localhost代替
:8848 web服务端口号(0-65535) 计算机通信用的,默认的web服务端口 80,不要写
hbuilder工具,内置了一个轻量级的web容器;
2. 本地文件的方式,直接双击打开,这种模式我们不推荐用

5.js中数据类型

1.number 数字 10,,6.6
2.string 字符串 单引号,双引号
3.boolean 布尔,逻辑值  ture/false 
4.undefined 未定义的
5.null 空的
6.object 对象


6.变量定义

6.1 var关键字
一、 使用关键字var
1. 变量可以任意赋值
var 变量名 
2. 如果不使用var 来定义变量,直接使用, 变量的作用域是顶级变量
 a=10  这时a是属于window的
3.变量可以重复定义 
===================
<script type="text/javascript">
			var a=10;
			//typeof用来查看数据类型的
			console.log("a=",a,typeof(a));
			a=9.9;
			console.log("a=",a,typeof(a));
			a="abc";
			console.log("a=",a,typeof(a));
			a=false;
			console.log("a=",a,typeof(a));
			a={};//
			console.log("a=",a,typeof(a));
			//变量没有定义,是不能用的,Uncaught ReferenceError: b is not defined
			//undefined
			console.log("b=",typeof(b));
			//
			//怎么理解顶级。顶层对象 window 对象,表示当前的window
			console.log(window);
			b=300;//没有使用var关键字,那么变量是属于顶层对象的,window的
			console.log(b,window.b);			
</script> 

注意以下代码

<script type="text/javascript">
			console.log(x);
			var x="aaa";
		    console.log(x);
		</script>

运行的效果是: undefined ,为什么呢?

这和js的执行有关,虽然 js是解释性语言,边解释边执行,var x=“aaa”,先执行 定义变量a, 类型定义,会先加载,但并不赋值。然后再从上开始执行 console.log(x),所以,显示未定义(没有赋值);

6.2 let关键字(es6新增的)

let定义的变量是块级,只在块内访问,不存在变量提升,不可以重复定义

{
  //这就是代码块
}
		<script type="text/javascript">
			{
				var x=10;
				console.log("块内:x=",x);
				let y=20;//作用域只在这个块内,出了后就无效了
				console.log("块内:y=",y);
			}
			console.log("块外:x=",x);
			//console.log("块外:y=",y);
			console.log(a) ;
			var a=100;//变量的提升
			console.log(b) ;
			let b=200;//不存在变量的提升
		</script>
6.3const定义常量

ES6新增的const定义常量,块级,不存在变量的提升

常量一旦定义后,不能被改变,不允许重复定义;常量定义后必须赋初值;

一般常量名大写。

const MAX=999;		
console.log("max=",MAX);

7.运算符和表达式

类型运算符
算术运算符+ - ***** / % ++
赋值运算符= += -=
比较运算符> < >= <= == != === !==
逻辑运算符&& || !
7.1 算术运算符
var x=8,y=6;
//%取余数  / 两个整数相除,可能带小数点
console.log(8+6,8-6,8*6,8/6,8%6);
x=158;//分解这个三位数
var a=parseInt( x/100); //求百位,parseInt转成整数,取整
var b=parseInt(x%100/10);//十位
var c=x%10;//个位
console.log(a,b,c);
//++ 自增 -- 自减
//a++,相当于a=a+1
//++在变量的前面,那么该变量先自增,再参与表达式的计算
//++ 再变量的后面,那么改变量先参与表达式的计算,再自增
x=50;
//y=++x-10;//y=41  x=51
y=x++-10;//y=40  x=51
console.log('y=',y,'x=',x);
7.2 比较运算符
>,>=,<,<=,==,!=
===恒等于
!==恒不定于
let x=10,y=20;
//关系表达式,这是一个逻辑值true/false
console.log(x==y,x!=y,x>y,x<y);
//==和===的区别
//==比较,会自动将类型转成同一种类型,再比较
//===恒等,不会自动类型转换,如果类型不一致,就不相等了
let a="10";
console.log("==",x==a,"===",x===a);
7.3 逻辑运算符

逻辑运算符用来连接多个关系表达式

&& 与   两边为真才为真,并且...并且...
|| 或   只要有真就为真,或者...或者...
! 非    就是取反 真->假,假->真
================================
	/*
			&& 与   两边为真才为真,并且...并且...
			|| 或   只要有真就为真,或者...或者...
			! 非    就是取反 真->假,假->真
			优先级: ! > && >  ||
			*/
		   //1.  x属于 (10,50] 
		   let x=10;
		   console.log(x>10&&x<=50);
		   //2. 判断ch是一个字母 小写和大写
		   let ch='9';
		   /*这里要说,为啥字符是可以比较的呢?
		   字符在计算机中的存储模式,编码
		   ascii码 ,单字节编码,即一个字符占一个字节
		   字符    十进制(ascii码)
		   null       0
		   退格       8
		   换行      10
		   回车      13
		   控制字符   <32  
		   空格       32
		   0          48
		   A          65
		   B          66
		   a          97
		   #######################
		   uincode编码 一个中文占2个字节
		   utf-8 国际码  1-3个字节
		   */
		   let exp=ch>='a'&&ch<='z'||ch>='A'&&ch<='Z';
		   console.log(exp);
		   //判断一个年份是否是闰年,条件:年份能被4整除,并且不能被100整除,或者能被400整除
		   let year=2022;
		   //这个括号可加可不加,加了逻辑更清楚点。
		   exp=(year % 4 ==0 && year % 400 !=0 )|| year % 400 == 0;
		   console.log(year,'是否是闰年',exp);
		   /
		   //a,b,c表示三角形的三个边长,问,不构成三角形的表达式 
		   a=3
		   b=4
		   c=15
		   exp=a+b<=c||a+c<=b||b+c<=a;
		   console.log("不构成三角形么?",exp);
7.4 短路与和短路或
//注意,短路与和短路或
x=10
y=20
//y= 20 为什么?
//&&要求,两边为真,才为真;当左边的表达式为假,那么右边表达式的的结果不影响整个
//表达式的结果,因此,系统不会去扫描执行了。
exp=x<10 && ++y>20;
//y=? 20 短路或,概念同上
exp=x<20 ||++y>20;
console.log("y=",y);

第二章: 分支结构

1. 条件表达式

问号表达式 ?
语法: exp1?exp2:exp3 当exp1为真,那么整个表达式的值为exp2否则是exp3

let a = 10,	b = 20;
//a,b中的大数
let max = a > b ? a : b;
console.log('max=', max);
//
let nums = 25; //总人数
let size = 4; //每间房间住的人数
let room = nums % size == 0 ? nums / size : parseInt(nums / size) + 1;
console.log('room->',room);
//可以嵌套的
//假设month表示月份,输出对应的季度
let month=13;
let sea=month>12||month<1?"无效月份":month>=10?"第四季度":month>=7?"第三季度":month>=4?"第二季度":"第一季度";			
console.log(sea);

2. if语句

if(条件){
	真执行的代码
}else{
	假执行的代码
}
<script type="text/javascript">
			//输入一个数字,输出绝对数
			let num=parseInt(prompt("请输入数字:"));
			if(num<0){
				num=-num;
			}
			alert('绝对数为:'+num);
			
</script>

输入年份,判断是否是闰年

<script type="text/javascript">
			var year = parseInt(prompt("请输入年份:"));
			if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
				alert(year + "是闰年");
			} else {
				alert(year + "不是闰年");
			}
		</script>

3. if else if else

if else 是2选一模式,这个是n选一模式

和条件表达式实现的功能类似

<script type="text/javascript">
    //输入成绩,输出对应的等级 >=90 A,>=80B >=70 C >=60 D <60不及格  0-100之间的
    var score=parseInt(prompt("请输入成绩:"))
    if(score<0||score>100){
        alert('成绩无效');
    }else if(score>=90){
        alert('A')
    }else if(score>=80){
        alert('B')
    }else if(score>=70){
        alert('C')
    }else if(score>=60){
        alert('D')
    }else {
        alert('E')
    }
</script>

4. switch语句

多路分支,和 if else if有点类似,

注意:

执行流程,当flag和case进行匹配,从匹配到的开始执行,一直遇到break结束.
case 后面的常量要唯一,如果重复,那么逻辑就不正确了

<script type="text/javascript">		
    let flag=prompt("请输入学生成绩等级A-E:");
    switch(flag){
        case 'A':
            console.log(">=90");
            break;
        case 'B':
            console.log(">=80");
            break;
        case 'C':
            console.log(">=70");
            break;
        case 'D':
            console.log(">=60");
            break;
        case 'E':
            console.log(">=00");
            break;
        default:
            console.log('成绩无效');
    }
</script>

第三章:循环结构

1.while循环

while(表达式){
//循环体
}
当条件为真,做循环体,直到条件为false
	<script type="text/javascript">
        //1+2+3+4+..100=?
        let sum=0;
        var i=1;
        while(i<=100){
            sum+=i; //+=,-=,*=,/=  sum+=i相当于 sum=sum+i;
            i++;
        }
        console.log("1+2+3+..100=",sum);
        //
        //有的时候循环次数是未知的
        //看程序,写出执行结果
        //sum=0+5+4+3+2+1  x=12345 x>0  5 x=1234
        sum=0;
        let x=12345
        while(x>0){
            sum+=x%10;
            x=parseInt(x/10);
        }
        console.log("sum=",sum);

</script>

2.do…while循环

do{
循环体
}while(表达式);
先执行循环体,再判断表达式,如果为真,继续执行。直到假结束。
特点:至少做一次
	<script type="text/javascript">
        /*
			和电脑玩猜数字游戏:
			电脑出随机数0-100之间 [1,100)
			玩家猜数字,电脑给出大了,小了的提示,最后猜对退出。
			电脑给出提示:猜对了,共猜了6次
			*/
        let count=0;//计数器
        let num;//玩家猜的数字
        //Math.random() [0,1)任意小数
        let x=parseInt(Math.random()*(100-1)+1);
        do{
            num=parseInt(prompt("请猜数字:"));
            if(num>x){
                alert("大了");
            }else if(num<x){
                alert("小了");
            }
            count++;//计数器累加
        }while(num!=x);
        alert('恭喜,猜对了,共猜了'+count+'次');
</script>

3.for循环

for(exp1;exp2;expe3){
	循环体
}
含义:先执行exp1,再判断exp2,如果为真,那么执行循环体,再执行表达式3,再判断exp2,为真继续执行,直到假结束。
注意:exp1,exp2,exp3这3个表达式不是必须的,可以省略,但是如果省略,分号不能省略
for(;i<10;){

}
for是用在,当循环次数已知的情况下。其实,这是对while的一种简化

<script type="text/javascript">
    //输出所有的水仙花数			
    //水仙花数是一个三位数,个十百位的立方和等于这个数本身
    //如 153 =1*1*1+5*5*5+3*3*3
    //穷举法
    let a,b,c;
    for(let i=100;i<=999;i++){
        a=parseInt(i/100);
        b=parseInt(i/10)%10;
        c=i%10;
        if(a*a*a+b*b*b+c*c*c==i){
            console.log(i);
        }
    }			
</script>

4. 理解 continue和break

continue:是结束当前循环,进入下一轮循环
break:跳出当前循环
一般情况下,建议大家不要用。
<script type="text/javascript">
    //题目:输入n个数字,输入0作为结束
    //求输入的平均数
    var sum=0;//和
    var count=0;//计数
    var num;
    //进入死循环,由循环体内容判断退出
    while(true){
        num=parseInt(prompt("请输入数字:"))
        sum+=num;//和累加
        count++;
        if(num==0){
            break;//跳出循环
        }
    }
    alert('平均数为:'+sum/count);
</script>

5.嵌套循环

嵌套循环,循环里面套循环
注意一点,当进入内循环后,要内循环全部做完,再做外循环的
<script type="text/javascript">
    //打印九九乘法表
    /*
			 1*1=1
			 2*1=2 2*2=4
			 3*1=3 3*2=6 3*3=9
			 ....
			*/
    for(let i=1;i<=9;i++){
        //外循环表示行数
        for(let j=1;j<=i;j++){
            //在文档里打印,拼接一个字符串
            document.write(j+"*"+i+"="+j*i+"&nbsp;&nbsp;&nbsp;");
        }
        document.write("<br/>");
    }
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值