JavaScript从零开始,第一周学习内容回顾

121 阅读6分钟

js的作用

  1. 客户端的数据计算;
  2. 表单的数据验证;
  3. 提供了事件;
  4. 网页中一切css作不了的特效,都由js完成。

js的使用

1.使用方法:

 ①在HTML中
          <script>
                 js代码
          </script>
 ②创建一个.js的文件,在里面书写js代码,最后在HTML中引用
          <script src=""xx.js文件路径"></script>

2.调试语句

在控制台输出日志:console.log(想要输出的东西)

在页面上进行输出:document.write(想要输出的东西)

弹出框显示:alert(想要输出的东西)

3.js语句规范:严格区分大小写

4.js注释: 单行注释:// 多行注释:/***/

5.变量语法: var 变量名="值"

   =  赋值符号,将等号右边的数据放到左边的变量名中

例:

var age=18;
console.log(age);
//输出结果为:19

注意:
变量名不能随意取,尽量的见名知意。
如果创建多个变量,中间的var可以省略,中间的(;分号)换为(,逗号),最后依然是以;分号结束。
如果是一个未声明的变量直接使用,报错;如果一个声明过的变量但是未赋值会显示:undefined
name变量名是一个关键字,里面只能

6.常量:一旦第一次赋值后,值不允许被修改

语法:const 常量名=值;

7.算术运算符:

   +  -  *  /  %
   1.%:取余,俗称模,两个数相除取余
       5%2==1
       2%5==2  ...

       作用:判断奇偶性
              num%2;  //结果为0说明是一个偶数
                        结果为1说明是一个奇数
             获取某个数字的最后n位
               1234%10==4
               1234%100==34  ...
   2.隐式转换:悄悄的转换,数据类型会发生变化,默认运算符左右两边都会悄悄变成一个数字
      特殊:
      1.+ 运算,只要碰上一个字符串则都为字符串
      2.- * / 运算,有字符串也可以转换为数字必须包含纯数字的字符串才可以,只要包含了非数字字符则为NaN
     注:NaN,Not a Number:不是一个数字,但是又确实是数字类型---不是有效的数字
       NaN参与任何算术运算结果任为NaN
       参与任何比较运算结果为false
       

8.数据类型

   String--字符串,取值有无数个,必须写""''
   Number--数字,取值有无数个,直接写数字
   Bodean--布尔,取值只有两个,truefalse,主要用于怕判断比较
   Undefined--取值只有一个默认值undefined
   Null--空,取值只有一个null,用于释放变量,节约内存空间

数据类型的转换

1.算术运算符的隐式转换:其他运算符也有,只要是算术运算符就一定带有转换,默认会将左右两边的转换为数字,再运算。

特殊:

  1.+ 运算,只要碰上一个字符串则都为字符串
  2.- * / 运算,有字符串也可以转换为数字必须包含纯数字的字符串才可以,只要包含了非数字字符则为NaN。
  3.部分结果转换为数字的结果:true==1
                           false==0
                           undefined==NaN
                           null==0
  4.NaN:Not a Number:不是一个数字,但是又确实是数字类型---不是有效的数字
     缺点: NaN参与任何算术运算结果任为NaN
           参与任何比较运算结果为false
     问题: !isNaN(x)--判断x是不是一个有效数字 
                 true--说明是一个有效数字
                 false--说明是一个NaN

2.强制/显示转换:隐式转换的结果不是我们所想要的,可以通过手动调用某些方法,进行数据类型的转换后再运算。

转为字符串
    语法:
       var str=x.toString();//x不能是undefined和null
转数字
    1.var unm=parseInt(str/num);
     例:console.log(parseInt(35.5));//输出为35
     从左向右依次读取每个字符,进行转换,碰到非数字字符就停止,且不认识小数点,如果一开始就碰到了不认识的字符结果为NnN
    2.var num=parseFloat(str);
      例: console.log(parseFloat(35.5));//结果为35.5
      原理和parseInt一摸一样,但是认识小数点。
    3.Number(x);任何人都可以转为数字,完全是隐式转换,不如使用运算符。
    

函数

1.函数也称为方法,需要预定义提前创建好后可以反复使用的代码段。

2.创建函数并且调用函数

第一步
  创建
    function 函数名(){
         若干代码段段
         }
第二步
  调用
     1.直接在js中写函数名()
     2.绑定在页面的元素上,让用户来触发,用户触发一次就执行一次
     

3.带参数的函数

 1.创建带有参数的函数
 形参:就是一个变量名,只不过这变量名不需要var,并没有保存真正的值,形式参数,简称形参
     function 函数名(形参,...){
         函数体;
     }
 2.调用带参数的函数
  实参:实际参数,这个变量名所保存的值。
      函数名(实参,...)
      
  实现任意两个数相加:
      function add (a,b){
          console.log(a+b);
      }
      带参数的函数,在调用时传入的实参的顺序和个数都要一一和行参对应上
 

分支结构

1.流程控制语句

1.顺序机构:从上向下一步一步执行
2.分支/选择结构:根据条件,选择一部分代码执行
3.循环结构:根据条件判断是否需要再一次重复的执行

2.比较运算符

>  <  >=  <=  ==  !=
作用:比较判断/条件中出现
结果:结果一定是一个布尔值。具有隐式转换

if结构

1.一个条件一件事

if (条件){
      操作
}

2.一个条件2件事

if (条件){
    1
}else{
    2
}

3.多个条件多件事

if (条件1){
    1
}else if(条件2){
    2
}else{
    3
}

循环结构

循环三要素

1.循环条件:开始,结束,重复执行的次数
2.循环体:循环操作,干什么事
3.循环变量:自增,自减

while循环:

语法:
var 循环变量=几;
while (循环条件){
    循环体;
    循环变量的变化;
}
死循环:
while (true){
    循环体;
}
退出循环:break;
一般用于 循环次数不明确的情况,死循环

for循环:

语法:
   for(var 循环变量=几;循环条件;循环变量的变化){
		循环体;
	}
        特殊:1、死循环:for(;;){循环体}
	      2、创建循环变量部分,也可以,隔开创建多个变量
              一般用于 已经确定了循环次数的情况 

数组

数组中的每个元素都有一个唯一的位置序号,称之为【下标】,用来表示数组中的每一个元素,下标是从0开始的,到最大长度-1结束 1、创建数组:2种方式

1、直接量方式:var arr=[];//空数组
			 var arr=[元素,元素,...];

2、构造函数方式:var arr=new Array();//空数组
			var arr=new Array(元素,元素,...);

2、访问数组中的元素:数组名[下标];

3、添加/修改数组中元素:数组名[下标]=新元素; 4、数组唯一的一个属性:length长度

语法:数组名.length;
三个固定套路:
	1、永远希望想末尾添加元素:arr[arr.length]=新值;
	2、获取倒数第n个:arr[arr.length-n];
	3、缩容:删除数组的倒数n个:arr.length-=n

5.遍历数组:把数组中的每一个元素都取出来执行相同 或 相似的操作

公式:
		for(var i=0;i<数组名.length;i++){
			数组名[i];//当前次拿到的数据
		}

DOM树

DOM将HTML看做了是一个倒挂的树状结构,但是树根不是理解的HTML标签

树根:是一个document对象,document对象不需要我们程序员创建,由浏览器的JS解释器创建,一个页面只有一个document

作用:提供了一些属性和方法,可以让我们程序员去操作整个DOM树(增删改查每一个DOM节点)

DOM节点:一个标签、文本、属性、元素

查找元素

1、通过HTML的特点去查找元素

   1. id查找:var elem=document.getElementById("id值");
     返回:找到了,返回对应的元素
		 没找到,null
	   在当前DOM树中,根据元素的id,获取具体的DOM节点(后端工程师使用)
           
   2. 标签名查找:var elems=document/已经找到的父元素.getElementsByTagName("标签名");
     返回:在当前DOM树中,根据标签名获取元素们
               返回:找到了,返回一个DOM集合
                     没找到,空数组
     特殊:1、返回的不是一个DOM节点,而是一个DOM集合,是不能直接用来做操作的,要么使用下标拿到某一个,要么使用遍历拿到全部
          2、不一定非要从树根开始查找元素,也可以写一个你已经找到的某个父元素
    3.class查找:var elems=document/已经找到的父元素.getElementsByClassName("标签名");
	   在当前DOM树中,根据标签名获取元素们
	   返回:找到了,返回一个DOM集合
		 没找到,空数组
	  特殊:1、返回的不是一个DOM节点,而是一个DOM集合,是不能直接用来做操作的,要么使用下标拿到某一个,要么使用遍历拿到全部
	       2、不一定非要从树根开始查找元素,也可以写一个你已经找到的某个父元素

2.节点之间的关系进行查找:前提:必须先要找到一个人,才能使用关系

        父:elem.parentNode;//单个元素
	子:elem.children;//集合
	第一个儿子:elem.firstElementChild;//单个元素
	最后一个儿子:elem.lastElementChild;//单个元素
	前一个兄弟:elem.previousElementSibling;//单个元素
	后一个兄弟:elem.nextElementSibling;//单个元素

操作元素

<标签名 属性名="属性值" style="样式">内容</标签名> 1、内容:

      1、innerHTML属性:获取 或 设置 某个元素的内容,并且可以识别标签
	获取内容:elem.innerHTML;
	设置内容:elem.innerHTML="新内容";

   2、innerText属性:获取 或 设置 某个元素的文本,不能可以识别标签
	获取内容:elem.innerText;
	设置内容:elem.innerText="新内容";
   	
   3、value属性:专门为单标签(input)操作内容准备的
	获取内容:input.value;
	设置内容:input.value="新内容";

2、属性:HTML属性:id、class、title、alt、style、type、href...只要是放在HTML标签上的都是一个属性

            1、获取属性值:elem.getAttribute("属性名");
	2、设置属性值:elem.setAttribute("属性名","属性值");
            简写:
                    1、获取:elem.属性名;
		2、设置:elem.属性名="属性值";
            缺陷:1、不能操作自定义属性,只能操作标准属性
                  2class在ES6升级为了一个关键字,所以想要写class换为了className

3、样式:

       1、css定义的方式:
	1、内联样式 - 二阶段
	2、内部样式表
	3、外部样式表 - 最适合写样式的时候使用此方法

   2、JS操作内联样式的好处:
	1、优先级最高,写的JS样式必定生效
	2、一次只会操作一个元素,不会牵一发动全身

   3、语法:
	获取:elem.style.css属性名;
	设置:elem.style.css属性名="css属性值";

	特殊:1、css属性名,要把有横线地方,换成小驼峰命名法
	      2、获取的时候,代老湿只交了大家获取内联样式,不能获取样式表中的样式

4、元素绑定事件:

    单个元素:
    elem.onclick=function(){
		操作;
		this->单个元素绑定事件,this->elem绑定事件的这个元素
	  }

多个元素:
    for(var i=0;i<elems.length;i++){
		elems[i].onclick=function(){
				操作
				this->多个元素绑定事件,this->当前触发事件的元素
		}
	  }