js第一周学习成果

122 阅读3分钟
JavaScript的概述:

简称js,是一个运行在(js解释器)中的一个(解释型)(弱类型)(面对对象)脚本语言

js引入方式

1、在HTML中书写一个script标签 2、创建一个xx.js文件,再在HTML进行引入

输出方式:

1、在控制台输出:console.log(); 2、在页面上输出:document.write();//绑定事件函数里面写了document.write()把页面上原来的HTML全部替换 3、在警告看输出:alert();//卡主整个页面

变量和常量

var 变量名=值; const 常量名=值;

算术运算符:+ - * / %

特殊:%:模,取余,两个数相除,不取商,而取除不尽的余数

数据类型:
 原始类型:5个,NumberStringBooleanUndefinedNull

 引用类型:11个,ArrayFunction
数据类型转换:
 隐式转换:算术运算符具有隐式转换:默认,转为数字,在运算
     true->1 false->0 undefined->NaN null->0
特殊:1、+运算碰上了字符串,则变为拼接
     2、-*/%:字符串也能转为数字,纯数字组成的才行,包含非数字字符,则为NaN
	"1000"->1000
	"100x0"->NaN

NaN:不是一个数字,但是确实是数字类型
缺点:
1、参与任何算术运算结果仍为NaN
2、参与任何比较运算结果都为NaN - 无法使用普通的比较运算判断x是不是NaN
解决:!isNaN(x)
	     
强制转换:
 转字符串:xx.toString();页面上一切的数据都是字符串,所以此方法几乎很少使用
 undefined和null不能使用,因为他们不能使用、操作
转数字:3个
parseInt/Float(str);//从左向右依次读取每个字符,碰到非数字字符就停止,Int不认识小数点,Float认识第一个小数点

Number(x);//完全等效于隐式转换,不会手动使用,还不如*1 /1 -0
Function:自定义函数
需要提前创建好的,以后可以反复使用的代码段 - 时机:要么程序员调用几次就执行几次,要么用户触发几次就执行几次
何时:1、不希望打开页面立刻执行
  2、希望可以反复执行
  3、独立的功能体 - 每一个作业(轮播、选项卡、购物车、正则验证、数据渲染...)
如何使用:
1、创建函数
function 函数名(形参,...){
		函数体;
	}

2、调用函数
函数名(实参,...);

要不要带参数的函数具体看你自己:
1、如果函数体是固定的,则不用
2、如果函数体需要根据实参的不同,进行略微不同的操作,则需要带参数的函数
分支结构:
比较运算符:> < >= <= == !=
逻辑运算符:
	&&:全部满足,才满足
	    一个不满足,则不满足

	||:全部不满足,才不满足
	    一个满足,则满足

	 !:颠倒布尔值

以上的所有的运算符结果都是布尔值

if(){}
if(){}else{}
if(){}else if(){}else{}
    
    
循环:
反复执行 相同 或 相似的代码 - 时机:程序员写好的,而且几乎就一瞬间做完了,其实一次一次执行的,只不过速度很快
var 变量=几
while(条件){
操作;
变量变化
}

for(var 变量=几;条件;变量变化){
操作
}

死循环:while(true){}		for(;;){}

退出循环:break;
数组:一个内存空间,可以保存多个数据
如何:
1、创建:
   var arr=[];
   var arr=new Array();

2、访问:arr[i]; - 下标越界:undefined

3、添加:arr[i]=新值; - 下标越界:稀疏数组,下标不连续,遍历的时候就会得到很多很多的undefined

4、arr.length:获取数组的长度
	三个固定套路:
		末尾添加:arr[arr.length]=新值;
		获取末尾第n个元素:arr[arr.length-n];
		缩容:arr.length-=n;

5、数组三大不限制:类型、长度、下标越界(缺点)

6、遍历数组:
	for(var i=0;i<arr.length;i++){
		arr[i];//当前元素
	}
DOM:Document Object Model
    文档对象模型,专门用于操作文档(HTML)

DOM树:DOM将HTML看做了是一个倒挂的树状结构,树根:document对象,不需要创建
   
DOM将每一个【元素】、文本、属性、注释,都看为是一个DOM节点/元素/对象
树根作用:找到任何元素,找到元素后就可以操作元素
查找元素:
1、通过 HTML 特性:
	id:单个元素 - 没找到返回null
            标签/class名:var elems=document/parent.getElementsByTag/ClassName("标签/class名");
	    特殊:1、DOM集合 - 不允许直接做操作的,要么加下标拿到某个,要么加遍历拿到所有
		      2、parent:你之前已经找到的某个父元素
		      3、没找到:[]

2、通过 关系:至少要找到一个人,才能使用关系网
	父元素:elem.parentNode;
	子元素:elem.children; - 集合
	第一个儿子:elem.firstElementChild;
	最后一个儿子:elem.lastElementChild;
	前一个兄弟:elem.previousElementSibling;
	后一个兄弟:elem.nextElementSibling;
操作元素:
1、内容:innerHTML(能识别标签)/innerText(纯文本)/value(专门为input准备的)
   获取:elem.xxxx
   设置:elem.xxxx="新内容"

2、属性:
   获取属性值:elem.getAttribute("属性名") -> elem.属性名
   设置属性值:elem.setAttribute("属性名","属性值") -> elem.属性名="属性值"

   简化版有缺陷:
	1、class写为className
	2、自定义属性不能操作到

3、样式:内联样式
   获取:elem.style.css属性名
   设置:elem.style.css属性名="css属性值";

   特殊:1、css属性名有横线去掉横线变成小驼峰命名法
	 2、只能访问内联
绑定事件:
单个元素:elem.onclick=function(){}

多个元素:for(var i=0;i<elems.length;i++){
		elems[i].onclick=function(){}
	  }

this关键字:目前只能在【事件】中使用
	单个元素绑定事件this->这个元素:绑定事件的这个元素

	多个元素绑定事件this->当前元素:当前触发事件的元素