JavaScrip第一周知识点

83 阅读4分钟

1.输出方式

console.log();

document.write();支持标签,但是如果绑定事件后点击触发的话会替换整个html

alert();会卡住页面

2.变量和常量

变量:var 变量名=值;
常量:const 常量名=值;  一旦创建后不允许修改

3.算术运算符 + - * %

4.数据类型:

1.原始/基本/值类型:String/Number/Boolean/Undefined/Null

2.引用/对象类型:11种--Array/Function

5.数据类型的转换

1.隐式转换

   1.算术运算带有隐式转换:默认转为数字,再运算
      特殊:1.+运算:如果碰到字符串,变成了拼接操作
            2.-*/%:字符串可以转为数字,但是纯数字组成的,但凡包含一个非数字字符,则为NaN
            3.true->1,false->0,undefined->NaN,Null->0
            4.NaN:不是一个数字,但是是数字类型
                  全是缺点:1.参与任何算术运算,结果都为NaN
                            2.参与任何比较运算,结果都为false,甚至自己都不认识自己
                   解决方法:!isNaN(x)  true->x是一个有效数字
                                       false->x是一个NaN

2.显示转换:

隐式转换的结果不是我们想要的,先强制转换一下,再去做操作

 1.转字符串:x.toString();  x不是undefinednull,因为undefinednull不能使用.
        页面上获取到的数据默认都是字符串类型
        
 2.转数字:
     var num=parseInt/Float(str);  专门为字符串数字准备的方法
       原理:从左往右依次读取每个字符,碰到非数字字符则停止,Int不认识小数点,Float认识第一个小数点,如果一来就不认识,则为NaN.
       
      Number(x);//x可以是万能的,相当于隐式转换,还不如*1 /1 -0
   

6.函数:

方法:需要预定义的,可以反复使用的代码段-要么就是用户触发一次就执行一次,要么就是程序员调用一次执行一次

  1.创建:
    function:函数名(形参,...){
        函数体;
        }
        
   2.调用:
       1.程序员在js里面调好:函数名(实参,...);
       2.绑定在页面元素上:<any on事件名="函数名()"></any>--html(内容)和css(样式)和JS(行为)要分离--以后不要这么使用
     

7.分支结构

作用:根据条件的不同,选择一条路执行

比较运算符:> < >= <= == !=
逻辑运算符:&& || !
结果都是一个布尔值,但是比较运算符是直接比较,逻辑运算符是综合比较
if(条件){操作}
if(条件){操作}else{默认操作}
if(条件){操作}else if(条件){操作}else{默认操作}

8.循环结构

作用:根据条件满不满足,如果满足就会一直操作,直到条件不满足才会停止

1.var i=0;
 while(i<10){
console.log(i);
i++;
}

2.for(var i=0;i<10;i++){
  console.log(i);
}

3.死循环:

 while(true){}
 
 for(;;){}
 
4.循环流程控制语句:退出循环:break

9.数组

一个变量可以保存多个数据,以后也可以拿出来使用

 1.创建
     直接量:var arr=[1,2,3,4];
     构造函数:var arr=new Array(1,2,3,4);
 2.使用
    访问:arr[i]
    添加:arr[i]=新值;//i处已经有人了,则为替换
  3.数组的三大不限制:
     不限制长度
     不限制类型
     不限制下标越界
  4.数组的属性:arr.length-得到长度
      1.缩容:arr.length-=n;
      2.向末尾添加元素:arr[arr.length]=新值;
      3.获取倒数第n个元素:arr[arr.length-n];    
   5.遍历数组:
      for(var i=0;i<arr.length;i++){
          arr[i];//当前次元素
       }
  

10.DOM

树根是document,不需要我们程序员创建,直接可用,一个页面只有一个document

  1.查找元素
       1.通过html的特点
        ID:var elem=document.getElementById("id值");--单个元素,没找到为null
        标签名/class名:var elems=document/parent.getElementByTag/ClassName("标签/class名");--集合,没找到为空集合
            
        2.通过节点之间的关系:
          父:elem.parentNode;--单个元素,没找到为null
          子:elem.children;--集合,没找到为空集合
          第一个元素儿子:elem.firstElementChild;
          最后一个元素儿子:elem.lastElementChild;
          前一个元素兄弟:elem.previousElementSibling;
          后一个元素兄弟:elem.nextElementSibling;
          
       单个元素可以直接做操作,但是集合不行:
          1.要么加下标拿到某一个
          2.要么遍历拿到每一个
       
  2.操作元素
        1.内容:innerHTML/innerText/value(专为input准备的)
              获取:elem.xxx
              设置:elem.xxx="新内容"
      
        2.属性
              获取:elem.getAttribute("属性名")  简化:elem.属性名
              设置:elem.setAttribute("属性名","属性值") 简化:elem.属性名="属性值"
              简化版有2个小缺陷:
                 1.自定义属性不能操作
                 2.class必须写为className
               建议:优先使用简化版,简化版做不到的操作再用复杂版代替     
        3.样式:JS就要操作内联样式
             获取:elem.style.css属性名;
             设置:elem.style.css属性名="css属性值";
             特殊:css属性名有横线的地方要去掉横线变为小驼峰命名法
             
      获取的目的往往都是为了判断
      设置的目的就是修改
      
   3.绑定事件:
       单个元素:elem.onclick=function(){
                       //关键字this
                 }
       多个元素:
              for(var i=0;i<elems.length;i++){
                 elem[i].onclick=function(){
                       //关键字this
                 }
               }