JS旅程小结一

130 阅读10分钟

1、js输出方式

①控制台输出:consle.log(数字/“字符串”/变量);
②在页面上输出(支持标签):document.write(数字/“字符串”/变量);
③在弹出框输出:alert(数字/“字符串”/变量)

2、变量

1、创建变量:var 变量名=值;
如果创建多个变量,可以省略掉中间var,分号都要换为逗号简写
特殊性:①变量名不是随意的,不能以数字开头②不能使用关键字③要见名知意
注意**:变量名有一个很特殊的name,不管保存的数据是什么,最后都会变成一个字符串
赋值符号:“=”;把=右边的数据保存在=左边的变量名之中,左边就单单纯纯的是一个变量名而已,不会变成变量的值

3、常量

常量:一旦创建,值不可以被修改
语法:const常量名=值;

4、数据类型

Number:数字,取值有无数个        String:字符串,取值有无数个
Boolean:布尔值,取值只有两个。true(真)、false(假)
Undefined:取值只有一个。undefined是变量的默认值,没有任何作用
Null:取值只有一个。可以用null释放内存

5、算术运算符(+、-、*、/、%)

%:取余,俗称摸。m/n不取商,而且除不尽的余数
作用:①判断奇偶性  a%2==0为偶数,a%2==1为奇数
    ②获取一个数字的后n位   1234%10--4      1234%100--34
    ③判断一个数字永远不超过几      n%5--结果永远不会超过5
**注意**:算术运算其实具有隐式数据类型转换,默认都会转为数字运算
特殊:+运算中,如果碰到一个字符串,那么两边的数据都会悄悄转换为字符,然后+运算变为拼接操作
    -、*、/、%其实字符串也可以转换为数字必须是纯数字组成的字符串才行,只要包含一个费数字字符,结果仍为NaN

6、其他

①用户输入框var user=prompt(“提示文字”,“默认值”)
②查看数据类型:typeof(变量、值、表达式);
③在页面上的获取到的数据类型都是字符串,如果要转为数字,有三种方法:
    *a、parsInt()
        原理:从左到右依次读取每个字符,碰到非数字字符则停止,并且不认识小数点,如果一开始就遇到的就不认识则为NaN。如:parseInt35.45);转换出来为35
    *b、parseFloat();
        原理:几乎和parseInt一致,但是认识第一个小数点。他们在转为数字的同时都去掉了单位
     c、number()
         任何人都可以转为数字。等同于隐式转换

7、数据类型的转换

1、隐式转换
NaN(not a number):不是一个数字,但是确是number类型,不是有效数字。它参与任何的算术运算,结果人给NaN;它也参与任何的比较/关系运算,结果都为false,甚至不认识自己。
!NaN();用于判断是不是有效数字。结果为true则为有效数字,falseNaN。可用来限制用户输入的必须是一个数字。
2、强制转换
转字符串:xx.toStringundefinednull不支持,不能使用操作

8、函数

 1、什么是函数:是一段为预定义好的,可以反复使用的代码,失格独立的功能体,可以将若干个的代码放在里面
 2、语法
     a、创建函数 function 函数名(){}
     b、调用函数
         函数名();写几次就调用几次
         可以将函数用按钮绑定在页面上,等用户来触发<button onclick=“函数名()"></button>
 3、带参数的函数
     a、创建     function 函数名(形参,形参,....){函数体;}
         形参:形式参数,是一个变量,只不过不需要var
     b、调用     函数名(实参,实参,...)/实际参数
         例: function  hs(形参){函数体}
                    hs(实参)
         注意:①传入实参的顺序一定要和形参的顺序对应上
             ②函数不一定非要有参数:如果操作是固定的,则不需要传递参数;根据传入的实参不同,做的操作略微不同,则需要添加参数。            

9、分支参数

 1、程序的结构
     a、顺序结构:默认结构,从上向下一次执行每一句代码
     b、分支结构:根据判断条件,选择一部分代码去执行(只会走一条路)
     c、循环结构:根据判断条件,选择是否重复执行某一段代码
 2、比较/关系运算符   >/</>=/<=/==(等于)/!=(不等于)
     这几种运算符结果都为布尔值:truefalse
     往往比较运算符出现在分支、循环的判断条件之中
     关系运算符也具有隐式转换
 3if结构
     a、一个条件一件事,满足就做,不满足就不做,但是后续代码还是会执行
         语法:if(判断条件){操作;}
     b、一个条件两件事,满足就做第一件,不满足就做第二件
         语法:if(判断条件){操作1;}else{默认操作}
     c、多个条件多件事,满足谁就做谁
         语法:if(判断条件){操作1;}else if(判断条件){操作2;}...else{默认操作;}

** 10、逻辑运算符**

1、&&:与(并且)
    只有全部条件都为true,最后才为true;只要有一个条件为false,最后结果都为false
2、||:或
    只有全部条件都为false,最后结果才为false;只要有一个条件为true,最后结果就位true
 3、!:颠倒布尔值
     !truefalsefalsetrue

11、循环结构

什么是循环:反腐之星相同或相似的操作
循环三要素:①循环条件:开始、结束:循环执行的次数
        ②循环体:循环的操作:要干什么
        ③循环变量,切变量需要不断的变化
 1while循环
     var 循环变量=几;
     while(循环条件){循环体
                      循环变量变化一下;}
     执行原理:先判断循环条件,如果条件为真,则执行一次循环体,然后再判断循环条件;如果条件为真,则执行再一次循环体.....知道条件为false,循环才会结束
     循环是一次一次执行的,并不是同时执行的
     死循环:永远不会结束的循环。保存死循环也是可以退出循环的。搭配break退出
         使用:不确定要小hiing的具体次数,但往往死循环会搭配上break进行退出。
         死循环语法:whiletrue){循环体}
2for循环
    语法:forvar 循环变量=几;循环套件;变量的变化){循环体}
    特殊:①死循环for(;;){循环体}-两个分号一个不能少
        ②循环变量处其实可以创建多个变量
        ③也支持break
3、总:a:while循环一般用于不确定循环次数时候,当做死循环,依据判断条件搭配break使用
       b:for循环常用于确定循环次数时使用

12、数组

1、数组:多个数据/元素组成的一个集合,保存一个变量中
    数组中的元素都是按照线性顺序来排列,除了第一个元素,每个元素都有一个唯一的前驱元素;除了最后一个元素,每个都有一个唯一的后继元素
    **数组中每个元素都有一个唯一的位置序号,称之为“下标”,用来表示数组中的每一个原色下标是从0开始,最大为(长度-12、创建数组
    方式一、直接量方式
        var arr=[];空数组
        var arr=[数据,数据,...];
    方式二、构造函数方式
        var arr=new Array[];空数组
        var arr=new Array[数据,数据,...];空数组
3、访问数组
    a、获取数组
        数组名[下标];
        注意:下标越界,获取到的是一个undefine
    b、添加数组
        数组名[下标]=新数据;
        注意:① 如果下标处已有元素,则为替换
             ②如果下标越界,会导致数组变成一个稀疏数组,中间就会出现很多的undefine,而且下标也不在连续
数组的三大不限制:
    a、不限制元素的长度b、不限制元素的类型c、不限制下标越界(不推荐越界)
4、数组对象-属性
    语法:数组名.length-获取到数组的长度
    向末尾添加元素:arr[arr.length]=数值
    获取倒数第n个元素:arr[arr.length-n];
    删除末尾的n个元素:arr。length-=n;
 5、遍历数组(将数组中的每个元素都取出来执行相同或相似的操作)
     语法: for(var i=0i<arr.length;i++){arr[i];/当前次获取到的元素} 

13、JavaScript组成的三部分

1、ECMAScript
2、DOM-Document Object Model:文档 对象 模型-操作为文档(html3、BOM-Brower Object Model:浏览器 对象 模型-操作浏览器

14、DOM概念

DOM树:把html看做了是一个倒挂的树状结构,但是树根并不是HTML,而是document对象。document对象不需要创建,由浏览器的js解释器自动创建,一个页面只有一个document
注意:DOM会把页面上的所有的元素都看做是一个DOM对象,DOM节点、DOM元素都是同一个意思

15、获取元素

A、通过HTML的属性去获取元素
    1、通过ID名获取元素
    语法:var elem=document.getElementByld(“id值”)
    返回:是一个DOM对象/DOM节点/DOM元素才可以直接做操作
    注意:①如果id重复了,只会返回第一个
        ②如果没有找到,返回的是一个null
        ③此方法基本不用
    2、通过标签名和class名获取元素
        通过标签名
            语法:var elems=document(或者父元素).getElementsByTagNames(“标签名”)
        通过class名
            语法:var elems=document(或者父元素).getElementsByClassNames(“class名”)
    返回:是一个DOM集合,是一个类数组对象,类似数组,可以用下标、length、遍历
    注意:①一个DOM集合是不允许直接做操作的,除非加下标的到某一个或遍历得到所有人,才能做操作
        ②如果没有找到,返回的是一个控股集合
        ③此方法不一定要写document,也可以写父元素。如果写的是document,则会找到页面上所有的标签,而写的是父元素,只会找到父元素下面的所有的标签
A、通过节点之间的关系获取元素
    前提:至少先要找到一个元素,才能找关系
    父元素:xx.ParentNode(找到的是单个元素)
    子元素:xx.children(找到的是一个集合)
    第一个儿子:xx.firstElementChild(找到的是单个元素)
    最后一个儿子:xx.lastElementChild(找到的是单个元素)
    前一个兄弟元素:xx.previousElmentSibling(找到的是单个元素)
    后一个兄弟元素:xx.nextElementSibling(找到的是单个元素)

16、操作元素

1、内容
    a、innerHTML:能够识别标签,用于操作双标签
        获取:elem(为标签名)innerHTML;
        设置/修改:elem.innerHTML=“新内容”;
    b、innerText:用于操作双标签,不能识别标签
        获取:elem.innerText;
        设置/修改:elem.innerText=“新内容”
    c、value:用于操作input标签
        获取:elem.value;
        设置/修改:elem.value=“新内容”
2、属性
    获取属性值:elem.getAttribute(“属性名”;)
    设置属性值:elem.SetAttribute(“属性名”,“属性值”;)
    简化版:
        获取属性值:elem.属性名;
        设置属性值:elem.属性名=“属性值”;
    简化版的缺点:①class必须写为className②只能操作标准属性,不能操作自定义属性
3、样式
    内联样式:
        优点:①优先级最高,保证js用户触发一定会生效
            ②不会牵动所有,只会操作当前元素       
        缺点:获取样式时,一定要保证此样式在内联样式中
        获取样式:elem.style.css属性名;
        设置样式:elem.style.css属性名=“css属性值”;
        注意:caa属性名的写法中,如果有“-”要去掉,换成小驼峰命名法
        例如:原来css中为background-color;在js中应写为:backgroundClor
4、绑定事件
    语法:标签名.onclick=function(){点击后要执行什么代码}
5、this关键字
    单个元素绑定事件,this表示这一元素
    多个元素绑定事件,this表示当前触发的元素

17、脱掉字符串的衣服

语法:eval(str);
 例:eval("3*3");(脱掉衣服后为3*3,自动进行乘法运算,输出结果则为9//9
    eval("[1,2,3,4]");//[1,2,3,4]