Javascript

什么是JavaScript

Java和JavaScript的关系就好像老婆和老婆饼的关系,没有关系。

非要说关系:都是编程语言。

JavaScript是Web开发领域中的一种功能强大的编程语言,主要用于开发交互式的网页。

简称JS

网页的组成:

一个完整的网页由三部分组成:

  1. HTML   (网页的主体部分)
  2. CSS     (美化的主体部分)
  3. JavaScript (实现业务逻辑和页面控制)

以上的举例说明:

网页中最常见的无非就是登陆页面。

HTML无非就是账号框,密码框,登陆按钮。

CSS无非就是美化上述内容。

JS就是当用户点击登陆按钮,获取账号和密码框的内容,去后台进行校验,判断是否账号密码匹配,然后做出相对于的反馈

JS的三大组成:

第一部分:核心语法  (JS代码)

第二部分:DOM文档对象模型  (JS可以控制HTML元素进行相关的操作)

第三部分:BOM 浏览器对象模型(JS可以控制浏览器元素进行相关的操作)

浏览器元素:弹窗。浏览器的宽高,滚动条等等。

JS的特点:

  1. 简单易用 (只需要用户安装浏览器即可使用)
  2. 跨平台    和上述一样。
  3. 支持面向对象

JS常见的开发工具

常见的两大开发工具

VSCode

HBuilderX

优点

1什么语言都可以用它编写

1.专注于前台设计

缺点

1.第一个优点导致的问题:界面设计不合理,安装的插件需要很多。需要联网等

2.功能较少

第一个拥有JS代码的HTML网页

之前讲过:网页由HTML,CSS,JS组成。所以绝大部分情况下,JS代码是放在HTML页面中。

绝少情况,暂不做了解。

案例1:打开网页,弹出一个警告框提示用户“请输入正确格式”;

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title></title>

</head>

<body>

我的第一个HTML页面

<script>

alert("请输入正确的格式");

</script>

</body>

</html>

上面的案例的总结分析:

总结1:JS代码必须放在<script>标签内部。

总结2:script不能交叉嵌套。

总结3:script标签的摆放的顺序可以随意。但是推荐放在body标签内部的最下方。

分析总结3的原因

如果HTML页面中有大量的JS代码。导致需要加载时间较长。

由于JS代码的执行是从上到下。如果将JS代码放在HTML页面的上方。就会导致。执行JS的代码时间过长,导致JS下方的HTML代码未被加载。所以总结3的原因。

HTML页面书写JS代码的常见两种方式

JS代码和CSS代码非常类似,都可以在一个网页中拥有多个代码标签片段。

  1. 嵌入式:就是刚刚讲解的方法。将JS代码放在script标签中,将script标签放在HTML页面中。(和CSS代码很类似)适用于:JS代码较少。不会影响到我们阅读HTML代码。

  1. 外链式:适用于JS代码非常多,不适合放在HTML页面中,不然导致不方便阅读HTML代码。

如何使用外链式:

  1. 也是在适当的位置(body标签的最低部)引入script标签。
  2. 禁止在标签内部书写JS代码了
  3. 创建一个外部的JS文件了(后缀为.js文件)
  4. 这个外部js文件,就不要放script标签了。直接写代码
  5. 在A步骤中添加src=”xxx.js”路径即可使用。

多学一招:JavaScript异步加载

为了减小JavaScript阻塞问题对页面造成的影响,可以使用HTML5为<script>标签新增的两个可选属性async和defer实现异步加载。

所谓异步加载,指的是浏览器在执行加载JavaScript文件时不阻塞页面的加载和渲染。

该知识点仅做了解。

原因1:浏览器和计算机的执行速度已经非常快了,人的肉眼区分不了一丢丢时间差异带来的视觉效果。

原因2:即使退一万步讲,真的影响到了,使用上述方法也无法得到有效解决。

我们常见的处理方式:生成一个加载页面,提示用户“正在加载中…”。

JS最基础的几行代码

  1. alert(“xxx”);作用:生成一个警告的弹窗
  2. prompt(“xxxx”); 生成一个询问框,用户可以输入值。然后点击确定和取消。

点击确定:JS需要收集用户输入的信息(第二章讲解)。点击取消:无事发生。

  1. confirm(“xxx”); 生成一个询问框,但是不需要输入,只需要选择确定或取消。

以上三个就是JS内置的3个弹窗。(只有3个)

根据不同场合使用不同的弹窗。

  1. document.write(“xxxx”); 作用:在HTML页面输入一段内容。一般使用场景:用户执行了什么操作,才会显示什么内容。

  1. console.log(“xxx”); 需要按一下F12才能打开浏览器的控制台。常用于调试BUG。

第一章的注意事项:

转义符:如果遇到特殊符号:需要对其进行转义操作。

/是斜杠,挨着shift的

\是反斜杠:挨着回车上面的   作为转义符使用。

JS中的注释

分为单行注释:  //xxx

多行注释:

/*

Xxx

Xxx

HBuilderX创建项目的HelloWorld

  1. 下载安装包并解压,将HbuilderX.exe生成快捷方式在桌面。
  2. 左上角:文件---新建---项目---普通项目---项目名称---存储路径---基本HTML项目、、

变量

什么是变量:经常改变的量。
变量是程序在内存中申请的一块用来存放数据的空间。
变量由变量名和变量值组成,通过变量名可以访问变量的值。

回顾:Java的变量名的命名规则:

1.不能以数字开头
2.不能使用关键字(Java或JavaScript中自带的相关属性或方法。)
3.严格区分大小写
4.只能够由  数字  字母   下划线  $ 符号组成
5.见名知意  例如age   name  而不是 a  b  c  d
6.推荐使用驼峰命名法,例如studentName
(JS的变量名的命名规则,和Java完全一致。)

常见的关键字:

if       else      switch   for    class 
do      while     case     break  contiue
return   default    new      var    void

预留关键字:现在还没有自带,但是未来有,已经提前预留了。

implements    package   public  interface

扫盲: var 是varible(翻译:变量) 的缩学
回顾:Java是如何声明变量的:   数据类型   变量名   =   变量值   ;
js如何声明变量:      var 变量名   =   变量值   ;
潜台词:不管JS是什么数据类型,都用var.

JS中声明变量的2种方式:

1.先声明再赋值.例如:
var num ;
num = 10;
2.声明的同时也赋值,例如:
var age  = 20;
 

交换俩个变量的值

案例需要:自定义2个变量,要求让他们两个变量进行互换
//幻想成现实生活:张三和李四都拿了一个箱子,并且不能放在地上
//需要完成箱子的交换.
//做法:喊第三个人帮忙.把张三的箱子给第三个人,然后张三拿李四的箱子.,李四就拿第三个人箱子.
var a1 = 100;
var a2 = "张三";
var a3 = a1;
a1 = a2;
a2 = a3;
console.log(a1);
console.log(a2);

数据类型分类

回顾:Java中的数据类型分类:
A.基本数据类型
B.引用数据类型
JS同上,完全一致。
回顾:
Java中的基本数据类型:
1字节:byte  boolean
2字节:char  short
4字节: int   float
8字节:long  double
Java中的引用数据类型:
String   数组(Array)  任何Class,不管是你写的类还是JAVA自带的类。

JavaScript的基本数据类型:

 number      注意:number是数据类型但不是关键字
string          注意:string在java是引用,在JS是基本
boolean
null
undefined
bigint
symbol
JavaScript的引用数据类型:
数组  Object  函数(方法) 等等

布尔型

boolean读布尔
js的boolean和java的boolean完全一致
体现在:都是基本数据类型  都只有true和false
意义:用程序表示一件事成功或者失败,或表示一个条件成立或不成立。
JavaScript中严格区分大小写,因此true和false值只有全部为小写时才表示布尔型。

js中的number(读数值类型)讲解
一句话总结:即可以存放小数,也可以存储整数


var a = 123;
var b = 12.5;
a和b都是number类型.没有加引号
js中的string(读字符类型)讲解
这里要注意:
js的String和java的String不同之处1:
string在java是引用,在JS是基本
js的String和java的String不同之处2:
string在java中通过双引号声明
string在js  中既可以通过双引号也可以通过单引号声明
例如:
var str1 = "你好";
var str2 = '我好';以上都是string的写法

转义符

我想在页面输出:   你好,我的外号是"大聪明";
document.write("你好,我的外号是"大聪明";");写法是错误的.不能同时存在多个双引号
做法1:我们需要知道  单引号里面可以包着双引号
document.write('你好,我的外号是"大聪明";');
做法2:通过转义符--  反斜杠(enter上面的):\  斜杠:/ (shift左边的)
document.write("你好,我的外号是\"大聪明\";");

常见转义符

null和undefined数据类型讲解

null 表示空的意思 例如:
var str = null;
null的注意事项:没有任何属性或方法可言
undefined 表示未定义的意思 只声明了变量但是未赋值
例如:
var str123 ;//这个str123就是undefined

bigint和symbol数据类型讲解

igint 翻译:大数值
如果存在需求需要计算很大很大(不用去记,因为很大。)数字,那么number将无法实现
例如:下面的number绰绰有余
var num1 = 1111111;
var num2 = 2222222;
console.log(num1+num2);
var num1 = 11111111111111111111;//number
var num2 = 11111111111111111111;//number
console.log(num1+num2);//计算结果出现了误差
所以就需要借助于bigint
bigint类声明方法:
var num3 = 1111111111111111111n;//只需要在最后加n即可
var num4 = 1111111111111111111n;//只需要在最后加n即可
console.log(num3+num4);
symbol讲解:略 常用于独一无二的对象.

数据类型的检查

var num = 11;//number
var str = "11";//string类型
console.log(num);
console.log(str);
以上写法:是我们可以看到的.所以可以知道是什么类型.
但是缺点1:不方便在控制台得知是什么类型
例如我们第一章节学习的prompt语法
var money = prompt("请输入你的金额");//通过money变量接受用户在前台输入的值
console.log(money);//所需我们就要学习如何识别xx变量是什么类型
总结:prompt的返回值都是string
如何判断一个变量是什么类型
语法:  typeof xxx 返回是一个数据类型
var str = 123;
console.log( typeof str);//number
str = "123";
console.log( typeof str);//string

为什么要学习数据类型转换?见一下例题:

var num1 = prompt("请输入第一个数");
var num2 = prompt("请输入第二个数");
alert("两数之和为" + (num1 + num2));//这种写法是错误的 
原因:prompt返回的是一个string类型,两个string类型相加,是以拼接的形式

如何将字符串转成number类型.
js提供了下面三个方法,各有区别,都要掌握

parseInt()
parseFloat()
Number()

parseInt 将一个字符串类型的数字解析成整数
alert( parseInt("11.12")  );//11
alert( parseInt("11.99")  );//11   总结1小数后面直接省略,不会四舍五入
alert( parseInt("11.a12")  );//11     总结2小数后面直接省略
alert( parseInt("11a.a12")  );//11    总结3:解析顺序从左到右,解析到非数字就停止.
alert( parseInt("1a1a.a12")  );//1    总结4:只需要记住总结3
alert( parseInt("a11a.a12")  );//NaN      NAN 翻译: not a   numnber  不是一个数字
parseFloat()和上面的语法完全一致,唯一区别保留小数
console.log(  parseFloat("11.11") );//11.11
console.log(  parseFloat("11.11a") );//11.11
console.log(  parseFloat("11.1a1a") );//11.1
console.log(  parseFloat("11a.11") );//11
console.log(  parseFloat("a11.11") );//NAN
console.log(  parseFloat("11.a") );//11   
Number()只能将真正的数字解析
console.log(  Number("11.11") );//11.11
console.log(  Number("11") );//11
console.log(  Number("11") );//NAN

算数运算符有如下几种:

+    -    *      /       %
以上五种是最基本的加减乘除和取余

其中取余的注意事项:例题如下          
console.log(10%3);   //1
 console.log(10%-3);  //1
 console.log(-10%3);   //-1
 console.log(-10%-3);  //-1

总结:取余结果的正负取决于%左边的正负,也就是两个数取余,首先全看成正数
然后结果的正负和%左边的正负一致即可.

** 幂运算 语法: a ** b 理解为a的b次方
 console.log(2**3);   //8
            
++ 和 -- 表示自增1 和自减1
有两种用法: a++ 表示先用在加 ++a表示先加再用

做算数运算的注意事项: 任何编程语言都有一个通病
做小数运算会可能损失精度
 console.log(0.1+0.2);//0.300000004
            
所以JS提供了一个方法 来避免这种情况出现
 aaa.toFixed(num); 表示保留小数点后面几位小数
 aaa表示某个数 num表示保留几位 如果没写默认就是0
 console.log( (0.1+0.2).toFixed(3) );
注意事项: 该方法的返回值是string类型.
            
字符运算符 就是一个 +
 var str1 = "张三";
 var str2 = "是帅哥";
 console.log(str1+str2);//张三是帅哥
注意事项:任何类型 + string = string
所以:我们不仅可以将字符串转型成数字 也可以将任何类型 转成string
最常见的做法: 直接和空字符串相加即可.这样不会影响值的本身.
 console.log( typeof (1234 + ""));

根据弹窗,用户输入的数据完成求和运算,能够利用运算符计算用户输入的两数之和
为了避免JavaScript的精度问题,将结果保留两位小数。
           var num1 = prompt("请输入第一个数字");
           var num2 = prompt("请输入第二个数字");
            
注意:下面写法是错误的.原因: 因为toFieed方法只能给数字使用
但是prompt方法返回的一定是字符串,所以num1+num2的结果就是字符串.无法调用toFixed方法.
            // alert( (num1 + num2).toFixed(2) );
            
            //思考: 是一个一个将Num1和num2转成数字 还是为了节省代码将(num1+num2)看成一个整体然后进行转型
            //答案:这里不能为了节省代码. 因为string+string是字符串的拼接
            
            num1 = Number(num1);
            num2 = Number(num2);
            
这里注意:可以改进,如果结果是NAN 我们应该给用户提示一个"请输入合法的数据"
            
思路:将NAN的值弄清楚是什么类型 通过typeof 得知 NAN 是一个String类型
            if ( (num1 + num2).toFixed(2) == "NaN") {
                alert("请输入合法的数据");
            }else{
                alert( (num1 + num2).toFixed(2) );
            }

赋值运算符

赋值运算符:最常见的就是 = 将右边的式子赋给左边.
            // var a = 2 ;
            //不常见的有如下:
            // += *= -= /= %=
            //例如
            // a = a + 1; 等同于 a+=1;
举例:
            var a = 3;
            a += 2;     
            console.log(a);//5
            a -= 2;     
            console.log(a);//3        
            a *= 2;     
            console.log(a);//6         
            a /= 2;     
            console.log(a); //3    
            a %= 2;     
            console.log(a); //1
            a **= 2;        
            console.log(a); //1

比较运算符

比较运算符 用来比较两个值 怎么样 返回结果为boolean类型.
例如常见的有以下: > < >= <= != ==
了解一下的 === 表示全等于
==仅仅是判断值是否相等 ===不仅要值相等而且要类型相等
            console.log("1" == 1);//true
            console.log("1" === 1);//false

逻辑运算符

逻辑运算符的用法主要分为以下4类:

        && 短路与 & 逻辑与
        || 短路或 |逻辑或

用法完全一致 区别如下:
例如 a && b
如果a和b都为真,返回值才为真. 那么当a为false 将不会执行b
例如 a & b
如果a和b都为真,返回值才为真. 当a为false 将会执行b
例如 a || b
如果a和b只要有一个为真,返回值才为真. 那么当a为true 将不会执行b
例如 a | b
如果a和b只要有一个为真,返回值才为真. 当a为true 将会执行b
var num = 1;
            false && num++;
            console.log(num);//1
            true || num++;
            console.log(num);//1
            
            var num = 1;
            false & num++;
            console.log(num);//2
            true | num++;
            console.log(num);//3    

三元运算符也称为三元表达式

语法如下:
         条件表达式 ? 表达式1 : 表达式2
 如果条件表达式的值为true,则返回表达式1的执行结果。
 如果条件表达式的值为false,则返回表达式2的执行结果。
常用于替代简单的if-else语句

举例:
var age = 18;
          if (age>18) {
           alert("成年了");
          } else{
            alert("未成年");
          }
         alert( age>18?"成年了":"未成年" );

流程控制

流程控制.如果没有流程控制,JS的代码将会从上至下依次执行
有了流程控制,可以根据需求来进行代码的执行顺序
JS中的流程控制:无非就是 if 和 switch
其中if分为 简单的if if-else if else if

使用if语句实现只有当年龄(age变量值)大于等于18周岁时,才输出“已成年”,
            否则无输出。
            var age = 18;
            if (age>=18) {
                    alert("已成年");
            }

使用if…else语句实现当年龄(age变量值)大于等于18周岁时,输出“已成年”,
            否则输出“未成年”,示例代码如下。
            var age = 18;
            if (age>=18) {
                    alert("已成年");
            }else{
                alert("未成年");
            }

使用if…else if…else语句实现对一个学生的考试成绩按分数进行等级的划分:
            90~100分为优秀,80~90分为良好,70~80分为中等,60~70分为及格,分数小于60则为不及格。
            var score = 75;
            if (score > 90) {
                alert("优秀")
            } else if(score>80) {
                alert("良好");
            }else if(score>60){
                alert("及格");
            }else{
                alert("不及格");
            }

如果可能性较少 就有2-4种,使用if即可 如果可能很多就推荐使用switch

switch语句也是多分支语句,相比if…else if…else语句,
switch语句可以使代码更加清晰简洁、便于阅读,其语法格式如下。
switch ( 表达式 ) {
             case 值1:
                代码段1;
                break;
            case 值2
                代码段2;
                break;
             ...
            default:
                代码段n;
            }

举例
使用switch语句判断变量week的值,若week变量的值为1~6时输出“星期一”~“星期六”,
为0时输出“星期日”,若没有与week变量的值相等的case值时输出“错误”。
var week = 2;
     switch (week){
            case 1:
                alert("周1");
                break;
            case 2:
                alert("周2");
                break;
            case 3:
                alert("周3");
                break;
            case 4:
                alert("周4");
                    break;
            case 5:
                alert("周5");
                break;
            case 6:
                alert("周6");
                break;
            case 0:
                alert("周日");
                    break;
            default:
                alert("没有这个日期");
                break;
     }

注意事项1:break的重要性

     如果case中没有break,那么进入case之后,将不会跳出,而是会直接进入后续的case,并且是无条件进入,直到被break或执行完毕

注意事项2:如果存在多个case有相同的结果,怎么节省代码量。

var week = 2;
     switch (week){
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                alert("工作日");
                break;
            case 6:
            case 0:
                alert("节假日");
                    break;
            default:
                alert("没有这个日期");
                break;
     }

循环结构

for (var i = 1; i <= 100; i++) {
             console.log(i);         // 输出1、2、3、4、5、6……100
            }
            var i = 1;
            while (i <= 100) {
             console.log(i);
             i++;
            }

 
            var i = 1;
            do {
             console.log(i);
             i++;
            } while (i <= 100)

常用的跳转语句如下。

continue : 跳过本次循环,执行下一次
 break: 直接跳出循环.

举例: 输出1-100 如果是3的倍数就不输出.如果输出了61就停止输出
            for(var i = 1; i<=100;i++){
                if(i%3==0){
                    continue;
                }
                if (i==61) {
                    break;
                }
                console.log(i);
            }

嵌套循环举例

下面以9层金字塔为例,案例效果如下,分别在页面和或控制台输出:

                  *

                 ***

                *****

               *******

              *********

             ***********

            *************

           ***************

          *****************

页面输出的方法:
因为是9层 所有直接定义1-9的循环
            for(var i = 1 ; i<=9;i++){
开始思考:每一行由什么组成:
答案:空格和星星
所以:控制行数的for循环内部:先打印空格,然后打印**
找规律: 第一行:8个空格+1个星星 第二行:7个空格+3个星星 第三行:6个空+ 5个星星:
结论:第几行的空格数: 空格的个数 = 9-i
结论:第几行的星星数: 2*i-1
 for(var j = 1 ; j<=9-i;j++){
                    document.write("&nbsp;");
                }
                for(var k = 1 ; k<=2*i-1;k++){
                    document.write("*");
                }
控制行数的for循环的最后一行肯定是换行:
         document.write("<br>"); //注意:页面的换行指的是<br> 控制台的换行才是 \n
         }

控制台输出

        var str = "";
         for(var i = 1 ; i<=9;i++){
开始思考:每一行由什么组成:
答案:空格和星星
所以:控制行数的for循环内部:先打印空格,然后打印**
找规律: 第一行:8个空格+1个星星 第二行:7个空格+3个星星 第三行:6个空+ 5个星星:
结论:第几行的空格数: 空格的个数 = 9-i
结论:第几行的星星数: 2*i-1
          for(var j = 1 ; j<=9-i;j++){
              str = str + " ";
          }
          for(var k = 1 ; k<=2*i-1;k++){
              str = str + "*";
          }
          
控制行数的for循环的最后一行肯定是换行:
           str = str + "\n";//注意:页面的换行指的是<br> 控制台的换行才是 \n
         }

        console.log(str);
        console.log类似于Java中System.out.println();打印就自动换行
但是JS没有类似于System.out.print();的方法
所以如果想要在控制台实现类似的效果,应该将所有的内容放在一个字符串内.
然后通过console.log打印这个一个字符串

函数

函数的相关概念

 /*

                JavaScript的函数理解为Java里面的方法,

                把一些经常复用的代码,抽取出来封装在一个函数中。

                提高程序的可读性,减少开发者的工作量,便于后期的维护。

           

                Java中的方法的语法:

                public  返回类型 方法名(数据类型 变量名 , 数据类型  变量 ...){

                   

                }

                js中函数的分类:

                A.内置函数(JS提供的): console.log(); alert()  confirm  parseInt...  :

                B.自定义函数(程序员自己写的)

               

                其中自定义函数的声明语法如下:

                function  方法名(变量名,变量名...){

                }

                调用:  方法名(参数列表);

                函数定义与调用的编写顺序不分前后。

                你可以先调用函数,再声明函数

            */

           //声明一个无参函数

           function a1(){

               console.log(123);

           }

           

           a1();

           

           //声明一个指定个数的有参函数

           function a2(a,b,c){

               console.log(a+b+c);

           }

           a2(1,2,3);

           

           //声明一个若干个数的有参函数

           function a3(... a){

               for(var i = 0 ; i<a.length ; i++){

                   console.log(a[i]);

               }

           }

           a3(1,1.1,true,undefined,null,"你好");

           

           //有返回值的函数

           function a4(a,b){

               return a + b;

           }

           var sum = a4(10,20);

           alert(sum)
 

变量的作用域

  /*

                和Java一样 JS的变量也分为局部变量和全局变量(Java的叫法是成员变量,只是概念和全局类似)

 */

           

           function info() {

             var age = 18;

           }

           info();

           

           console.log(age);  

           //思考以上代码的执行结果是什么

           //A.18   B.报错   C.null   D.undefined

            //答案:B   提示:age is not  defined  表示未定义

            //原因如下:age是在函数里面定义的理解为局部变量.但是console.log是在函数外调用的.

           

            /*

                全局变量:在所有函数之外声明(script标签内部的最开始几行),它的作用域称为全局作用域,在同一个页面文件中的所有脚本内都可以使用。

               

                局部变量:在函数体内利用var关键字声明的变量称为局部变量,仅在该函数体内有效。

            */

函数进阶

 //以下知识点掌握即可:用的很少,但是看到了需要知道意思.

            //函数的声明 一般就是上面两个知识点即可.就是利用function声明

            //不仅有函数 还有一个叫做函数表达式的东西

            //函数表达式指的是将函数赋值给变量的表达式,

            // 通过“变量名()”的方式即可完成函数的调用,小括号“()”内可以传入参数,示例代码如下。

            //函数的写法:

            function a1(a){

                console.log("我被调用了。参数是" + a)

            }

            a1(123);

           

            //函数表达式的写法:

            var abc = function (a){

                console.log("我被调用了。参数是" + a)

            };

            abc(567);

 匿名函数

// 匿名函数自调用:HTML页面解析之后 自动执行的一段代码.只会执行一次.

            //例如跳转网页之后提示:登录成功  加载成功

            //语法如下:

            // (function(){

            //  alert("登录成功!!!");

            // })();

            //下面是函数叫做a的函数

            function a(){

                alert(123);

            }

          

            //匿名函数指的就是:没有函数名的函数  但是又拥有了变量名

            var a = function(){

                alert(456);

            }
 

箭头函数

//箭头函数了解即可:和函数表达式一样 比较鸡肋, 但是需要能看懂它.

            //以下3个函数的实际意义完全一样.

           

            function sum(a,b){

                return a + b;

            }

           

            var fn = (a, b) => a + b;

           

            var fn = (a,b) => {

                return  a + b;

            };
 

递归函数

//递归函数:了解即可. 函数的内部调用自己函数本身.

            //优点:代码简化. 缺点:难得想

                       

            //例如声明一个函数 求1-N的和

            function sum(n){

                var sum = 0;

                for(var i = 1 ;i<=n;i++){

                    sum = sum + i;

                }

                return sum;

            }

            var i = sum(100);

            alert(i);

           

            //递归的核心1:鸿沟(临界值)

            function sumDg(n){

                if(n==1){

                    return 1

                }else{

                    return n + sumDg(n-1);

                }

            }

            alert(sumDg(100));

           

            //案例:求菲不拉切序列  1   1   2   3   5   8   13   21

            //求第N项值

            function dg(n){

                if(n==1 || n == 2){

                    return 1;

                }else{

                    return dg(n-1) + dg(n-2);

                }

            }

对象

对象的概念

/*

                    在JavaScript中,对象属于复杂数据类型,

                    它是由属性和方法组成的一个对象。

                   

                    属性是指对象的特征。

                    方法是指对象的行为。

                   

                    下面以学生的特征和行为为例进行说明。

                    学生的特征:姓名、年龄和性别,这些特征可以用对象的属性来表示。

                    学生的行为:打招呼、唱歌、写作业,这些行为可以用对象的方法来表示。

                */

               //将10个学生的成绩输出在页面上。

                var arr  = [1,2,32,543,65,35,35,654,46,31];

                for(var i = 0 ;i<arr.length;i++){

                    if(i==arr.length-1){

                        document.write(arr[i] );

                    }else{

                        document.write(arr[i] + ',');

                    }

                }

               

                document.write("<hr>");

                   

               //将10个学生的全部信息(id  name  age  sex)输出在页面上。

               //传统的思路:定义40个变量 或者4个数组 或者二维数组等等

               //按照对象的思想:10个学生理解10个对象  将10个对象放在一个数组里面即可

              var s1 = {id:1001,name:"张三1" , age:18};

              var s2 = {id:1002,name:"张三2" , age:18};

              var s3 = {id:1003,name:"张三3" , age:18};

              var s4 = {id:1004,name:"张三4" , age:18};

              var s5 = {id:1005,name:"张三5" , age:18};

              var s6 = {id:1006,name:"张三76" , age:18};

              var s7 = {id:1007,name:"张三7" , age:18};

              var s8 = {id:1008,name:"张三8" , age:18};

              var s9 = {id:1008,name:"张三9" , age:18};

              var s10 = {

                  id :10010,

                  name:"张三",

                  age:20,

              };

             

              var arr = [s1,s2,s3,s4,s5,s6,s7,s8,s9,s10];

              // for(var i = 0 ;i<arr.length;i++){

              //    if(i==arr.length-1){

              //        document.write(arr[i] );

              //    }else{

              //        document.write(arr[i] + ',');

              //    }

              // }

              //注意:上述写法 打印的仅仅是外观的Object而非内部的属性。

              // for(var i = 0 ;i<arr.length;i++){

              //    if(i==arr.length-1){

              //        document.write(arr[i].id + arr[i].name + arr[i].age +"<br>");

              //    }else{

              //        document.write(arr[i].id + arr[i].name + arr[i].age +"<br>");

              //    }

              // }

              //以上写法较为麻烦

             

              for(var i = 0 ;i<arr.length;i++){

                  for(var sx in arr[i]){

                      document.write(arr[i][sx]);

                  }

                  document.write("<br>")

              }
 

创建对象

 //判断一个变量是否为对象的小技巧:通过console.log打印.

            //如果打印的是一行字符串 就说明是基本数据类型

            //如果打印的是一个可以折叠的数据 就表示对象

            // var a = 11;

            // console.log(a);

            // var arr = [1,2,3,4];

            // console.log(arr);

           

            /*

                如何创建一个JS的对象:

                方法1:使用对象的字面量创建对象(理解为直接赋值)

                例如:var arr = [1,2,3];,//静态声明数组 字面量创建

                就是用大括号“{}”来标注对象成员,

                每个对象成员使用键值对的形式保存,即 “key: value”的形式。

                多个成员通过逗号隔开

                键指的就是独一无二的属性  

            */

           

          // var student1 = { 'id' :1001 ,name:"张三" , age : 18 , 'sex-sex' : '男' } ;

          // //其中键可以选择性的加引号

          // console.log(student1);

          // //如何访问对象里面的值的方法1:  通过对象名.属性名即可

          // console.log(student1.id + "~" + student1.name + "~" + student1.age );

          // //如果存在一些命名不规范的变量 无法通过对象名.属性名访问

          // // console.log(student1.sex-sex);这行代码是报错的

          // //访问对象里面的值的方法2:通过对象名[属性名]

          // console.log(student1['sex-sex']);

          // console.log(student1['name']);

           

           //创建对象的补充:如果一开始只知道有对象,但是不知道它有什么属性或属性值,

           //那么可以先创建一个空对象壳子

           // var s123 = {};

           // //后续再声明属性的同时进行赋值

           // s123.id = 123;

           // s123.name = "Lisi";

           // s123.age = "男";

           // console.log(s123.id);//123

           // console.log(s123.dasd);//undefined

           

           

           //创建对象的方法2:

           //第一步:创建对象的函数(想象成Java的构造函数)

           // function Person(id,name,age){

              //  this.id = id;

              //  this.name = name;

              //  this.age = age;

           // }

           // //第二步:new对象

           // var p1 = new Person(123,"王五" , 20);

           // console.log(p1);

           

           //使用场景:如果对象很多 就用方法2   反之方法1

           

           

           //补充:对象由:属性和方法

           // var s1 = {

              //  id :11,

              //  name:"张三",

              //  age :18,

              //  study : function(){

                 //   alert("成功调用了这个对象的这个方法");

              //  }

           // };

           

           // alert(s1.id);

           // s1.study();

           

           function Person(id,name,age){

                       this.id = id;

                       this.name = name;

                       this.age = age;

                       this.eat = function(){

                           alert("我吃拉面");

                       }

           }

           //第二步:new对象

           var p1 = new Person(123,"王五" , 20);

           p1.eat();

           

           

           //创建对象的方法3:

           //如果谁不知道给对象取什么名字,就叫做Object

           var o = new Object();

           o.id=1231;

           o.name="李四";

           console.log(o);
 

 如何遍历一个对象

// var arr = [1,2,4,3];

            // console.log(arr);

           

            var s10 = {

                              id :10010,

                              name:"张三",

                              age:20,

                              sex:'男',

                              height : 188,

                              weight :200

            };

            // console.log(s10);

           

            //由于直接输出s10将只会显示object我们需要内部的属性值/

            //方法1:如果只需要某一个属性值, 直接通过s10.属性名即可

            //方法2:如果所有的属性值都需要,那么也可以通过s10.属性名 只是比较麻烦.

            //学习:如何遍历对象:语法如下:

            // for(var i = 0;i<a10.length;i++){

            //  //错误的写法:1.对象的键并不是012  其次对象并没有长度

            // }

           

            //i表示对象的下标(属性)    s10表示遍历的对象

            for(var i  in s10){

                console.log(s10[i]);

            }

值对象和引用对象

//JS的参数传递 也分为值传递和引用传递

            var a = 111;

            var b = "你好";

            var c = true;

            var d = [1,2,3];

           

            function change(a,b,c,d){

                a = 222;

                b = "我好";

                c = false;

                d[0] = 123;

            }

            change(a,b,c,d);

           

            console.log(a);//111

            console.log(b);//你好

            console.log(c);//true

            console.log(d[0]);//123
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值