javascript基础第一周

122 阅读7分钟

javascript基础

###一、javascript介绍: 简称:js,是一门运行在浏览器端的解释型弱类型面向对象脚本语言

由三部分组成:ECMAScript(核心语法3/5/6/7/8/9/10/11/12) DOM(和网页挂钩的) BOM(和浏览器挂钩)

1浏览器端:

打开浏览器就可以自己运行

2、类型

编译型:在程序执行执行之前,语法如果有错误,直接不运行 解释性:在程序运行之前,不需要检查语法是否正确直接运行,遇到错后续代码直接不运行 强类型:变量保存的数据,是由数据的类型来决定的 弱类型:变量保存的数据是可以随意的,数据类型由数据来决定 例:1--数字 "1"--表示字符串

3面向对象常见写法
对象名.属性名;
对象名.方法名();
4特点

1、可以使用一切编辑工具编写js代码 2、在程序运行之前,不需要检查语法是否正确直接运行,遇到错后续代码直接不运行 3、变量保存的数据,是由数据的类型来决定的 4、变量保存的数据是可以随意的,数据类型由数据来决定 5、可以完成css完成不了的操作

二、javascript的使用

1使用方式:

①在HTML页面上书写一个script标签,再在里面书写js代码

②创建一个xx.js的文件,再在HTML进行引入

2输出方式(打桩输出) ①在控制台输出日志:console.log(想要输出的东西);推荐 ②在页面上输出document.write(想要输出的东西); ③在弹出框输出日志:alert(想要输出的东西); 3变量 创建后可以修改 语法: var 变量名=变量值; 注: ①变量名不是随意的

②建议使用驼峰命名

③命名要见名知意

④变量值不可以是关键字

⑤变量可以创建,不可以赋值,默认值为undefined

⑥变量名可以连续写多个

        例:var 变量名=值,变量名=值,变量名=值,变量名=值;

4常量:

于变量相反创建后不可修改生活中常见的常量有一小时为60分钟

语法:const 常量名=常量值;

其余特点于变量一样

5数据类型:原始/基本/值类型:5个,查看数据类型:typeof(变量);

①number - 数字:取值有无数个,

②string - 字符串:取值有无数个,但是必须加上:"" 或 ''

③boolean - 布尔:取值只有2个,分别叫true(真|对) 或 false(假|错)

④null - 空,取值只有1个,就是null,

⑤undefined - 取值只有1个,就是undefined,

6运算符

①*算术运算符:+ - * / %

②比较/关系运算符:> < >= <= == != === !==

③赋值运算符:= += -= *= /= %=

④逻辑运算符:综合比较 - 用于写条件

1,&&:与(并且)

全部条件都满足,结果才为true,只要一个不满足,结果就为false

2,||:或者   全部条件都不满足,结果才为false,只要一个满足,结果就为true

3,!:颠倒布尔值

5自增自减运算符: ++ -- i++ ===> i+=1 ===> i=i+1 自增:固定的每次只能+1

6、位运算:

左移:m<<n,读作m左移了n位,翻译:m*2的n次方

右移:m>>n,读作m右移了n位,翻译:m/2的n次方

二、分支结构

1、程序的控制语言;三种

1、顺序结构 - 默认:从上向下依次执行每一句话
2、分支结构 - 通过条件判断,选择部分代码执行
3、循环结构 - 通过条件判断,选择要不要重复执行某块代码

1、if...else...如何使用:3种情况

1、一个条件,一件事,满足就做,不满足就不做
     if(条件){
	操作;
	}

2、一个条件,两件事,满足就做第一件,不满足就做第二件
     if(条件){
        操作;
        }else{
        默认操作;
     }

3、多个条件,多件事,满足谁,就做谁
     if(条件1){
        操作1;
        }else if(条件2){
        操作2;
         }else{
        默认操作;
     }

2、switch...case 分支:默认只要一个case满足后,会将后续所有的操作全部做完

解决:break;建议:每一个case的操作后面都跟上一个break

语法:

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

3、三目运算:简化分支

语法:

条件?操作1:默认操作;===if...else...

条件1?操作1;条件2?操作2:默认操作===if...else...

注:默认操作不可以省略,省略会报错,如果比较复杂不建议用三目运算,

页面上一切数据js获取到后都是字符串类型

1、强制转换:

①转字符串:2种方法

1、var str=x.toString();
2、万能的:var str=String(x);

2、转数字:3种方法

1parseInt(str/num);
    console.log(parseInt("35.5"));
2parseFloat(str);
    console.log(parseFloat("35.5"));
3Number(x);

3、转布尔值;得到的结果只有6个为false:0,"",undefined,NaN,null,false,其余全部都是true

    Boolean(x);

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

循环的三要素:

①循环条件:开始 - 结束,循环的次数

②循环体:做的操作是什么

③循环变量:记录着我们当前在哪一次,而且他会不断的变化

1、while循环:首先创建出循环变量,判断循环条件,如果条件满足,则做一次循环体操作,并不会退出循环,而会回过头再次判断循环条件满不满足,如果满足,则做一次循环体操作,...直到条件不满足,才会退出循环

    var 循环变量=几;
    while(循环条件){
    循环体;
    循环变量变化;
    }

2、for循环:和while的原理是一样的,但是他比while看上去更加的简洁

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

3、do...while循环

    var 循环变量=几;
		do{
			循环体;
			循环变量的变化
		}while(循环条件)
函数:Function的基础:

1、Function 也叫函数也叫方法,【先预定义】好,以后可以【反复使用】的【代码段】

2、如何使用函数:2步

1定义/创建/声明:

        function 函数名(){
		函数体/代码段;
		}
            函数名()//调用函数
 2、在html绑定事件<elem onclick="函数名()"></elem>  什么元素都可以用

3、何时使用函数

①、不希望打开页面立刻执行

②、希望用户来触发提升用户的体验感

1、在css中见过的函数

带参数的函数

1、rotate(180deg)

2、url(2.jpg)

4、自定义函数(function)

1、创建:(两种)

    1function 函数名(形参列表){
		操作;
		return 返回值/结果;
			}
    2var 函数名=function(形参列表){
		操作;
		return 返回值/结果;
			}

2、调用: var 接住返回的结果=函数名(实参列表);

3、作用域:两种

①全局作用域:全局变量 和 全局函数,在页面的任何一个位置都可以使用。

②函数作用域:局部变量 和 局部函数,在【当前函数调用时,内部可用】

4、申明提前:在程序正式执行之前,将var声明的变量(轻)和function声明的函数(重),都会悄悄的集中定义在当前作用域的顶部,但是赋值留在原地

5、重载:相同的函数名,根据传入的实参的不同,自动选择对应的函数去执行

数组的基础

1、创建数组:2种

    1、直接量方式:var arr=[];//空数组
                  var arr=[数据1,数据2,...];
    2、构造函数方式:var arr=new Array();//空数组				             
                    var arr=new Array(数据1,...);

2获取数组之中的元素: 数组名[arr]

3、后续添加/替换元素:

数组名[i]=新数据;
如果下标处没人则为添加,如果下标处有人则为替换

4、数组具有三大不限制

1、不限制元素的类型
2、不限制元素的长度
3、不限制下标越界

5、数组中有一个唯一的属性:length==>作用:获取到数组的长度,长度是从1开始的

语法:数组名.length

三个固定套路:

1、向末尾添加元素:arr[arr.length]=新数据;

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

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

6、遍历数组:往往很多情况,我们不会拿出某个元素来使用,而是拿出每个元素来进行 相同 或 相似的操作 - 搭配上循环

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

DOM:Document Object Model:文档对象模型

1、DOM树概念:DOM将我们的HTML看作了是一个倒挂的树状结构,但是树根不是html标签,而是document的对象

document对象:由浏览器的js解释器自动创建,一个页面只有一个document树根DOM会将页面上的每个元素、属性、文本、注释等等都会被视为一个DOM元素/节点/对象

2、元素查找:两大方面:

1、直接通过HTML的特点去查找元素:
    ①、通过ID查找元素:var elem=document.getElementById("id值");
        特点: 1、找到了返回当前找到DOM元素,没找到返回的一个null
              2、如果出现多个相同id,只会找到第一个

3、通过标签名查找:var elems=document/已经找到的父素.getElementsByTagName("标签名");

4、通过class名查找

特点:1、返回值,找到了返回一个类数组DOM集合,没找到得到空集合
     2、js只能直接操作DOM元素,不能直接操作DOM集合,解决:要么下标拿到某一个,要么遍历拿到每一个。
     3、不一定非要从document开始查找,如果从document去找,会找到所有的元素,可以换成我们已经找到的某个父元素

5、通过关系去获取元素:前提条件:必须先找到一个元素才可以使用关系

	父元素:elem.parentNode; - 单个元素
	子元素:elem.children; - 集合
	第一个子元素:elem.firstElementChild; - 单个元素
            最后一个子元素:elem.lastElementChild; - 单个元素 
	前一个兄弟:elem.previousElementSibling; - 单个元素 
	后一个兄弟:elem.nextElementSibling; - 单个元素
6、操作元素:前提:先找到元素,才能操作元素

1、内容:前面两种为双标签准备得

1、*elem.innerHTML - 获取和设置开始标签到结束标签之间的内容,支持识别标签的
		获取:elem.innerHTML;
		设置:elem.innerHTML="新内容";


2、elem.innerText - 获取和设置开始标签到结束标签之间的纯文本,不识别标签的
		获取:elem.innerText;
		设置:elem.innerText="新内容";
                    
单标签例:input标签
3、input.value - 专门获取/设置input里的内容
		获取:input.value;
		设置:input.value="新内容";

2、属性:

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

	简化版:
		获取属性值:elem.属性名;
		设置属性值:elem.属性名="属性值";
		简化版的缺点:
			1class必须写为className - ES6(2015年)class变成了一个关键字
			2、不能操作自定义属性

3、样式:

使用样式的方式:3种
		1、*内联样式
		2、内部样式表
		3、外部样式表 - 一阶段做开发用的都是外部样式表
获取样式:elem.style.css属性名;
	设置样式:elem.style.css属性名="css属性值";
	特殊点:
		1、css属性名,有横线的地方,去掉横线,变为小驼峰命名法
			border-radius     -----  borderRadius
		2、小缺陷:获取时,我们只能获取到内联样式,因为我们目前学的就是内联样式的操作

4、绑定事件:

elem.on事件名=function(){ 操作;

*关键字this - 这个

如果单个元素绑定事件,this->这个元素

如果多个元素绑定事件,this->当前触发事件元素 }*

一切的获取,往往都是为了判断

一切的设置,可以说是添加也可以说是修改