学习Javascript的第一周

100 阅读4分钟

第一周知识点

JavaScript概述

概述:JavaScript,简称JS,是运行在客户端浏览器的解释型弱类型面向对象的脚本语言。

解释型:在执行代码之前,不需要检查代码语法是否正确,遇到错误就直接停止执行后面的代码。

弱类型:变量保存的数据可以是随意的,数据类型是由数据来确定的。

JavaScript的特点:解释型、弱类型、面向对象编程方式

JavaScript的使用

引入:2种

1、直接在HTML中写一个script标签,里面就可以书写JS代码

2、外部引入JS文件,先创建一个JS文件,再引入到HTML中

 语法:<script src="xxx.js的路径"> 只要有了src属性,就不写代码 </script>

输出方式

1、控制台输出:console.log(要输出的内容);支持标签识别,

2、页面上输出:document.write(要输出的内容);支持标签识别,(如果绑定了点击事件,会将页面上原来的内容覆盖)。

3、警告弹出框输出:alert(要输出的内容); 会卡住页面,用户只能看到一个白板

变量与常量

变量

创建后,值可以进行修改;在重复使用的数据就可以放在变量中,以后使用变量名时就相当于在使用变量的值。

用法:var 变量名=变量值;

注意:变量名不是随意的,不能以关键字或保留字命名,不能以数字开头;如果变量名是name,无论保存的数据类型是什么,都会转换为字符串;创建多个变量可以简写 var 变量名=变量值,变量名=变量值...;

常量

创建后,值不可以进行修改;

用法:const 变量名=变量值;

算术运算符:+ - * / %

%运算:取余或模,用于判断,获取一个数的倒数n位;

注意:算数运算符具有隐式类型转换,默认转为数字在运算

1、 进行+运算时,如果+的两边只要有一边是字符串,结果会是字符串,+运算不再是+运算,而是字符串拼接;

2、- / * %运算时,也可以转换成数字,前提符号两边都必须是纯数字组成的字符串;如果字符串包含了非数字的字符串结果是NaN;

3、NaN不是一个数字,但是是数据类型,不是一个有效数字;NaN参与内容比较运算,结果都是false;参与任何算术运算,结果都是NaN;

数据类型

1、原始类型:5种

String:字符串,取值无数个

Number:数字,取值无数个

Boolean:布尔,取值两个---true 和 false

Undefined:取值一个---undefined

Null:空,取值一个--null 可以用来释放变量/内存。

2、引用/对象类型:11个引用类型的对象

在以后的学习中会接触到

数据类型转换

不同数据类型做操作可能出来的结果不一样;页面上获取的一切数据在JS中默认都是一个字符串。

查看数据类型 typeof(要查看的内容);

1、算术运算符的隐式转换

如上算术运算的注意一致
其他类型的数据也可转化成数字类型 true->1 false->0 undefined->NaN null->0

2、强制转换

1、转字符串:var str=x.toString();

注意:x不能是undefined或者null

2、转数字

1)、parseInt(str/num)
执行原理:专门为字符串和小数转为整数数字准备的,从左向右依次读取每个字符,碰到非数字字符,就停止转换,如果一来就碰到了不认识的,则为NaN。

2)、parseFloat(str)
执行原理几乎和上一个一样,可以识别第一个小数点。

3)、Number(x);相当于隐式转换

Function基础

Function:函数(方法),需要提前预定义好,后就可以反复使用的代码段

使用步骤: 1、定义/创建函数: function 函数名(){代码}; 2、调用函数:函数名(); 或者绑定在某个元素上,写上点击事件让用户来触发。

带参数的函数

创建:形参:形式参数,其实就是一个变量,但是不需要写var,而且默认也没有保存任何值,默认值为undefined

使用:实参 : 实际参数,真正的值,需要调用时再传入

   注意:1、参的顺序一定要和形参的顺序一一对应,并且数量也要对应;
   2、不是一定要带参数的函数才是好函数,具体情况,需要具体分析

分支结构

判断条件的不同选择对应的代码去执行,执行了一条路就不会再走别的路

程序的流程控制语句 3种

1、顺序执行–默认,从上向下的依次执行

2、分支结构-通过条件的判断,选择部分代码执行

3、循环结构-通过条件的判断,选择要不要重复执行某些代码

比较运算符 > < >= <= != ==

用于判断或比较;结果一定是Boolean值。

逻辑运算符 && || !

&& 并且,要求全部条件都要满足,最后结果才为true,只要有一个条件满足就为false;

|| 或,要求全部条件都要不满足,最后的结果才为false,只要有一个条件满足,结果则为true;

! 颠倒布尔值

for循环

    else if个数是不限的;
    最后的else可以省略不写,如果条件都不满足就会什么都不做;
    书写顺序要根据要求来判断,不能乱写。

一个条件,一件事,满足就做,不满足就不做

         if(判断条件){操作;}

一个条件,两件事,满足就做第一件,不满足就做第二件

        if(判断条件){操作;}else{操作;}

多个条件 ,多件事,满足谁就做谁

         if(判断条件){
         操作;
         }else if{
         操作;
         }else if{操作;
         } .....
         else{操作;}

循环结构

反复执行相同的操作

循环三要素

1)、循环条件: 开始---结束,循环的次数;

2)、循环变量:记录当前在哪一次,而且都会不断变化;

3)、循环体:具体做的操作。 回头继续判断条件是否满足。

while循环

语法:var 循环变量=几;while(循环条件){循环体;循环变量变化;}

执行原理:首先创建了循环变量,然后判断条件,如果条件满足,则做一次循环体操作,并不会退出循环,回头继续判断条件是否满足,如果满足,则再做一次直到循环条件不满足,才会退出循环。

注意:1、死循环:while(true){循环体;} 2、退出循环语句: break-只能在循环中使用,多半都是搭配死循环使用的

for循环

用法:for(var循环变量=几;循环条件;变量的变化){循环体;}

死循环:死循环:for(;;){循环体;}

for循环与while循环的区别

1、语法上有区别,但两者都能做到相同的操作;
2、一般来说我们不确定循环次数的时候,会使用while循环–死循环。

数组基础

数组:创建一个变量就可以存放多个数据的集合

数组都是线性排列的,除了第一个元素,每个元素都有唯一的前驱元素;除了最后一个元素,每个元素都有唯一的后继元素;下标是从0开始。

创建数组 2种方法

1、直接量方式

 var arr=[];
 var arr=[数据1,数据2...];

2、构造函数方式

 var arr=new Array();
 var arr=new Array(数据1,数据2...);

获取数组中的数据

数组名[下标];

添加/替换

数组名[下标]=新值;
如果下标的位置没有元素,就是添加元素,有则为替换

数组的三大不限制

1、不限制元素个数
2、不限制元素类型
3、不限制下标越界

    如果获取元素,下标越界,返回的值是undefined          
    如果添加元素,下标越界,会得到一个稀疏数组,导致下标不连续,若搭配上循环遍历就会得到很多undefined
    

下标越界的解决方法---使用长度

数组中唯一的属性:长度,数组名.length -获取当前数组的长度:最大下标+1
三个固定套路:
------获取倒数第n个元素: arr[arr.length-n];
------始终向末尾添加元素:arr[arrllength]=新值;
------缩容:删除倒数n个元素;arr.length--=n;

遍历数组

用法:for(var i=O;i<数组名.length;i++){ console.log(数组名们);//当前次元素 }

DOM的相关知识

DOM:Document Object Model 文档对象模型,专门用于操作HTML文档的。

DOM树概念

1、DOM将HTML看做了是一个倒挂的树状结构,但是树根不是html标签,而是document对象;
2、document对象:不需要程序员创建的,由浏览器的js解释器自动创建,一个页面只有一个document;
3、作用:可以通过树根找到我们想要的任何一个DOM元素/节点/对象(属性和方法);
4、DOM会将页面上每个元素、属性、文本、注释都会当作一个DOM元素/节点/对象。

查找元素

1、通过ID查找元素

用法: var elem = getElemtById("id名");

       注意:1、返回值,找到了返回的是一个当前找到的DOM元素,没找到,返回一个null,做了别的操作可能就会报错了;
       2、找到了多个相同的id,只会返回第一个。

2、通过标签名查找元素

用法:var elems=document/已找到的父元素.getElementsByTagName("标签名");

  注意:1、返回值:找到了返回的一个是类数组DOM集合(很像数组,都能用下标,都能用length,都能遍历);没有找到返回一个空集合;
  2JS不能直接操作DOM集合,只能操作DOM元素,解决:要么使用下标拿到某一个元素,要么使用遍历拿到每一个元素;
  3、不一定非要从document开始查找,如果document去找,会找到所有的元素,可以换成我们已经找到的某个父元素,就只会找到这个父元素下面的元素了。

3、通过class名查找元素

用法:语法: var elems=document/已找到的父元素.getElementsByClassName("标签名");

     注意:与通过标签名的相同

4、通过关系查找元素----前提:必须要先找到一个元素,才能调用关系网

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

DOM集合不能直接做操作

操作元素

1、操作内容

1)、innerHTML:获取和设置开始标签和结束标签之前的内容--支持识别标签;获取:elem.innerHTML; 设置: elem.innerHTML="新内容";
2)、innerText:获取和设置开始标签和结束标签之间的文本,但不支持标签识别;获取: elem.innerText; 设置:elem.innerText="新内容";
3)、value:专门为input标签的value值准备的; 获取input.value; 设置:input.value = "新值";

注意:前面两个属性只适用于双标签,做不了单标签的内容

2、操作属性

获取属性:elem.getAttribute("属性名");
设置属性值: elem.setAttribute("属性名","属性值");

简化操作:
--------获取属性值:elem.属性名;
--------设置属性值:elem.属性名="新属性值";

 注意:1class必须写为className - 2015年过后,ES6诞生过后,class变成了一个关键字;
  2、不能操作自定义属性,只能操作标准属性

3、操作样式

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

     注意:1、css属性名,有横线的地方,去掉横线,变为小驼峰命名法;
     2、获取时,只能获取内联样式。

4、绑定事件

elem.on事件名=function(){操作;}

this关键字:目前只能用于事件内: -------如果单个元素绑定事件:this->这个元素 -------如果多个元素绑定事件: ths->当前触发事件的元素

eval()计算字符串时去掉引号