JavaScript 基础

141 阅读2分钟

JavaScript第一周:

1、常量:const 常量名= 固定不变的值,不能修改 变量:var 变量名= 可以被多次赋值修改

2、引入js

1.<script>直接写js代码</script>
2.<script src="js文件路径"> 这里不能写js代码</script>

3、数据类型: 1、原始/基础/值类型:5个

	Number、数字,取值有无数个
            String、字符串,取值有无数个
            Boolean、布尔值,取值两个。表示判断的结果。ture为真,false为假
            undefined、取值只有一个,undefin的是变量的默认值
            null,空,取值只有一个 null。用于释放内存
 2、引用类型:11个 - Array

4、算术运算符:+ - * / %

5、数据类型的转换: 1、隐式转换: 算术运算符具有隐式转换,默认都转为数字再运算

	特殊:1、+运算,如果碰到一个字符串,那么两边的数据都会转为字符串,然后+运算变为拼接操作
	      2、-*/%,字符串也会转为数字,必须是纯数字组成的字符,但凡包含了非数字字符则为NaN
	      3true:1
		 false:0
		 undefined:NaN
		 null:0
		 "500":500
		 "50dsa0":NaN
	      4、NaN:参与算术运算结果都为NaN,参与比较运算结果都为false,判断是不是NaN:!isNaN(x)

2、显示/强制转换

	1、转为字符串:xx.toString();//undefined和null不支持
            String(xx);万能的,但没用,完全等效于隐式转换,还不如,还不如+""
            一般来说两个都不用,页面上获取到的数据都是字符串
	2、转为数字:parseInt(str/num)/执行原理:从左向右一次读取每个字符,碰到非数字字符则停止,并且不认识小数点,如果一来就不认识则为NaN
            parseFloat(str)/
            执行原理:几乎和parseInt一样,但是认识第一个小数点;
            以上两个API作用:强制转为数字的同时并去掉单位
            Number(x)//万能的。任何元素都可转为数字,但其实就是隐式转换,还不如:*1、/1、-0
        3、转布尔:1Boolean(xx);万能的,但是没用,还不如!!x
            只有6个为false: 0,"",underfined,null,NaN,false.
            其余都为Ture.一般不会手动使用此方法,但在某些地方会自动带有此方法:
            1、分支条件 2、循环条件

6、函数 function 函数名(){}; 可以多次被引入,用来做相同的操作。提前预定义好,反复执行的代码 创建:

function 函数名(形参,...){
	函数体
}

调用: 函数名(实参);

elem.onclick=function(){
	函数名();
}

分支结构:if(判断条件)

7、数组:一个变量/内存空间保存住多个数据 创建:var arr=[1,2,3,4,5,...]

访问:arr[下标] 倒数第n个:arr[arr.length-n]

添加/替换:arr[下标]=新值 末尾添加:arr[arr.length]=新值

缩容:arr.length-=n;

遍历数组:对数组中的每个元素执行相同 或 相似的操作

  for(var i=0;i<arr.length;i++){
	arr[i];//当前次元素
  }

8、 循环结构:反复执行的代码 - 几乎一瞬间执行完毕

var i=0;
     while(i<10){
	循环体;
	i++;
}

for(var i=0;i<10;i++){
	循环体;
}

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

退出循环:break

9、DOM:Document Object Model:文档对象模型:操作文档

概念:DOM把HTML看做了一个树状结构,树根是document对象(属性和方法),不需要创建,直接使用

1、获取元素:

标签/class名:var elems=document/已经找到的父元 素.getElementsByTag/ClassName("标签/class名")
特殊:1、返回的是一个类数组集合,可用下标、length、遍历 - 不能直接做操作
      2、没找到返回的空集合
      3、不一定非要从树根进行查找

通过节点之间的关系:前提:至少要找到一个人

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

2、操作元素: 1、内容:innerHTML(双标签:识别标签)/innerText(双标签:纯文本)/value(input) 获取:elem.内容属性; 设置:elem.内容属性="新内容";

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

3、样式: 内联样式 获取:elem.style.css属性名; - 只能获取到内联样式 设置:elem.style.css属性名="css属性值" 注意:css属性名有横线的地方都去掉横线,变为小驼峰命名法

3、绑定元素:

 单个元素:xx.onclick=function(){
		this->xx
	  }

 集合:
  for(var i=0;i<elems.length;i++){
	elems[i].onclick=function(){
		this->当前元素
	}
  }