我的Js第一周

167 阅读3分钟

基础概念:脚本语言;

JavaScript:简称js,是一个运行在客户端/浏览器端的解释性弱类型面向对象; 1.js的运行环境为浏览器自带,不需要安装任何环境

2.编译和解释:编译是在程序执行之前会先检查语法是否正确,如果不正确就不执行;比如:Java、C++;解释型是在程序之前不检查语法是否正确,而是直接执行,若是遇到错误之后会停止后续代码;例如:js、php

3.弱类型:变量的保存类型是随意的,数据类型由数据来决定;例如:1->nunber;"1"->字符串;"1"+"1"="11"强类型:变量保存的数据,由数据的类型来决定能保存什么数据。

  1. 面向对象:对象名.属性名 对象名.方法名()比如:console.log()控制台输出

使用方式:

两种使用方式: 1.直接在html页面上写上,;写在的最后,免得网络卡了加载不出来css; 2.创建一个xx.js的文件,在html中引入

## 输出方式 1.在控制台打印输出日志:console.log(你想要输出的东西); 2.在页面上输入日志:document.write(你想要输出的东西); document文档写入支持标签,将页面上的所有内容全部替换掉。 3.在浏览器的自带警告框输出日志:alert(...)会卡住整个网页,用户只能看到一个白板。

变量:

创建变量:

var 变量名=值;变量是在代码中可以变换的量,也是最基础的; 1.不能以数字开头;2.使用驼峰命名法或者下划线法;3.如果你的变量名为name,不管什么数据类型都会转为一个字符串;4.变量名不能是一个关键字5.变量只创建,不赋值,默认值为undefined;6.多个变量可以连续创建:var name="",age=""中间用逗号隔开;

常量:const 常量名=值;

常量是在代码中不会变的值,后续更改会报错,但是用的较少;

数据类型

基本类型

number:数字,直接写;蓝色 string:字符串,要加上""黑色 Boolean:布尔值,只有两个取值,true/false蓝色 null:空值,唯一的作用就是释放变量 undefined:默认值,取值只有undefined,灰色 查看数据类型:typeof()

运算符

算术运算符:+ - * % / 特殊:1.取余,作用:任意数取余2的结果为0的话则为偶数,可以用来判断奇偶数 取出后几位: console.log(1234%10)可以取出来4;1234%100可以取出来34;1234%1000可以取出来234

2.带有隐式转换,会将两边的数据类型都转为数字之后再进行计算;

true->1;false->0;null->0;undefined->NaN,"100"->100;"100px"->NaN字符串可以转换成数字,但是必须为纯数字,不然则为NaN

NaN:数字类型:算数运算的结果为NaN,比较运算为true/false;+遇上了字符串,两边都会转为字符串,变为拼接操作;

关系运算符:> < >= <= == != === !== 结果为一个布尔值(true/false)带有隐式转换:两边都变为数字之后才比较大小

如果两边都为字符串则会按位比较:ASCII码:0-9<A-Z<a-z<汉字;

判断一个数是不是nan:isNaN()

true==undefined结果为true,要用===表示值和数据类型都要相等

逻辑运算符:

&&与:有假必假

||或:有真必真

!:取反,颠倒布尔值

=:赋值= += -= *= /= %=

将右边的值保存到左边

++与--:

前++与后++的区别:

1、单独使用的时候并没有什么区别

2、前++返回的是加了1的值;后++是返回没有加1的值

分支结构:

if(条件){操作}else if(条件){操作}else{默认操作}

注意:1.分支结构只要满足了条件就不会走其他的路了,注意书写的顺序

2、else if想写多少根据自己的实际情况决定

3、else可以省略,但是不建议

4、分支可以嵌套

switch...case:知道结果可以使用

switch(变量/表达式){ case 1: 操作1; case 2: 操作2; break; default: 默认操作; }

注意:1.不带有隐式转换;获取到的值为字符串;

2、默认1个case满足之后也会执行后续的case,所以要用break;

if与switch区别:switch为等值查询,所以执行效率更高,if为范围查询比较,所以执行效率较慢。

3、三目运算:条件?操作1:条件1?操作2:默认操作

注意:默认操作是不能省略的,省略了会报错;如果操作比较复杂就不能使用三目运算,操作只能由一句话

页面上的一切东西都是字符串

1、强制转换数据类型: parseInt(转换为整数),从左到右依次识别,遇到不认识的东西会停下,不认识小数点,若是一开始就不认识,则为NaN。 parseFloat:跟上面个一样,但是认识第一个小数点 number()

2、强制转换为字符串

xx.toString() string()

3、转布尔类型:

Boolean()不如!!X; 只有6个数的值转布尔类型为false:0 undefined null "" false NaN

循环结构

循环结构:反复执行相同或者相似的操作

三要素:

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

2、循环体:每次循环要做的操作

3、循环变量:往往向着不满足循环的方向前进

三种结构:

while循环:

var 循环变量=几

while(循环条件){循环体;循环变量变化起来}

特殊:有时候会用到死循环,不会结束的循环,不确定循环的次数

while(true){}

打破循环:1、break直接打破循环

2、continue:退出本次循环,下一次还是执行

for循环:

for(var循环变量=几;循环条件;循环变量变换){}

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

for和while的区别:原理上并没有什么区别;while更麻烦,一般不确定循环的次数使用,for更简单,确定循环的次数可以使用,使用更多

while和do...while:当条件满足时并没有什么区别;条件不满足时,while不执行,而do...while至少执行一次;

function

1.定义:function 函数名(){函数体}

2、调用:函数名();

3、何时使用:不希望页面立即执行,希望由用户出发,函数是js的一等公民,所有独立的功能都要使用函数封装

4、带参函数:

创建一个带有参数的函数其实就是一个变量,不需要写var function(形参,....){};使用带参函数必须传入实参:函数名(实参,...)

注意:传参时需要一一对应,不能多也不能少,位置对应;

总结:1、不带参数的函数可以用来执行一些固定的操作;

2、带参函数可以根据传入的实参,执行不同的微操;

循环与函数的不同:时机不同;循环在页面打开时就已经完成了,函数需要调用才执行

自定义函数function:

1、申明方式就是上面那种

2、直接量方式:var 函数名=function(形参){函数体;return返回值;}

函数名其实就是一个变量名,尽量不要重复,否则后面的会把前面的覆盖;

2、return:退出函数,但是若是后面跟着一个数据,则会把数据返回到函数作用域的外部;但是return只负责返回并不负责保存,所以若是要使用函数内部的值的时候,要用一个变量去接住它;var result=函数名(实参);就算是省略掉了return,函数也会返回一个undefined。

3、作用域:2种; 1、全局作用域:全局变量和全局函数在任何一个地方都可以使用访问

2、函数作用域:局部变量和局部函数,只能在函数调用的时候在内部使用;

变量使用规则:优先使用内部的,内部没有就找外部的,外部没有就会报错;千万不要在函数内部使用没有定义的变量,会造成全局污染。

声明提前:

在程序正式执行之前,会将var声明的变量(轻)和function声明的函数(重)提前到函数的顶部,但是赋值会停留在原地。

强调:声明方式创建的函数会完整的提前;

直接量方式不会完整的提前,只有变量名部分会提前;

函数内部的变量会在执行完毕之后自动释放

重载:相同的函数名,根据传入的实参不同,自动选择对应的函数去执行,但是js不支持,后面的会把前面的覆盖

在函数内部自带一个arguments对象

固定套路:1、通过下标去传入的某一个实参:arguments[i];i从0开始

2、通过length去获取到底传入了几个实参:argument.length

数组

数组为线性排列;除了第一个元素,每一个元素都有一个后驱元素,除了最后一个元素每一个元素都有一个前驱元素,每个元素都有自己的位置称之为下标,从0开始,到最大长度-1。

创建函数:2种

1、直接量方式: var arr[];//空数组

2、构造函数方式:var arr=new Array();

获取数组中的数据:数据名[i]

后续添加/替换元素:

数组名[i]=新数据,下标没人为新增,下标有人为替换

数据的唯一属性:

获取数组的长度,从1开始

三个固定套路:

1、获取数组倒数第n个元素:arr[arr.length-n]

2、向末尾添加元素:arr[arr.length]=新

3、缩容:删除数组倒数第n个元素arr.length-=n

遍历数组:for(var i=;i<=arr.length;i++){}

DOM

1、document:不需要程序员自己创建,js解释器自己创建,一个页面只有一个document节点

var elem=docunment.getelementById() var elem=document.etElementByTagName("") var elem=document.etElementByClass() 特殊:

1、返回值:找到了返回的是一个类数组的DOM集合,没找到返回一个空数组

2、Js只能操作DOM元素,不能直接操作集合

3、不一定非要从document开始查找

通过元素之间的关系查找:

父亲:elem.parentNode

儿子:elem.children

第一个儿子:elem.firstElementChild

最后一个儿子:elem.lastElementchild

前一个兄弟:elem.previousElementSibling

后一个兄弟:elem.nextElementSibLing

操作元素:前提是找到元素

内容:innerHtml-获取开始到结束标签的内容 支持标签

获取:elem.innerHtml 设置:elem.innerHtml=""

innerText获取纯文本,不支持标签

设置:elem.innerText=""

以上两个标签都是双标签设置input有单独的设置方式

获取:input.value

设置:input.value=""

属性:

1、获取:elem.getAettribute("")

2、设置elem.setAttribute("属性名","属性值")

简化版:

1、获取:elem.属性名

2、设置:elem.属性名="属性值"

小缺陷:1.class必须写className

2、不能设置自定义属性,只能设置标准属性

样式:js来操作内链属性

获取:elem.style.css属性名

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

特殊:

1、css属性名有横线的地方要用小驼峰命名法来代替

background-color->backgroundColor

绑定事件:elem.onclick=function(){}

this只能在事件内部使用;单个元素绑定时,指代的是这个元素;多个元素绑定时,指代当前元素

一切的获取都是为了判断,一切的设置都是修改