js学习

  JS基础操作

  一、分支结构

  1、if语句

  if基础语法

  if (条件表达式)  {

  代码块;

}

// 当条件表达式结果为true,会执行代码块;反之不执行

// 条件表达式可以为普通表达式

// 0、undefined、 null、""、 NaN为假,其他均为真

  if 复杂语法

  // 1、双分支

  if (表达式1){

  代码块1;

}else {

  代码块2;

}

  // 2、多分支

  if (表达式1) {

}else if (表达式2) {

}

...else if (表达式2) {

} else {}

  if 嵌套

  if (表达式1) {

    if (表达式2) {

  }...

}...

  2、switch语句

  

switch (表达式) {
    case 值1: 代码块1; breakcase 值2: 代码块2; breakdefault:代码块3;
}
//1. 表达式可以为 整数表达式 或 字符串表达式
//2. 值可以为整数 或 字符串
//3. break可以省略
//4.default为默认代码块, 需要出现在所有case最下方,在所有case均未被匹配时执行

  二、循环结构

  1、for循环

  

for (循环变量①;条件表达式②;循环变量增量③) {
   代码块④; 
}
// 1.循环变量可以在外、在内声明
// 2.执行逻辑 ① ②④③ ... ②④③ ②, 入口为①,出口为②, ②④③个数为[0,n]

  2、while循环

  

while (条件表达式) {
    代码块;
}

  3、do...while循环

  

do {
    代码块;
}while (条件表达式);

  4、 for...in循环

  

obj = {"name":"zero","age": 8}
for (k in obj) {
  console.log(k, obj[k])  
}
// 用于遍历对象:遍历的结果为key,通过[]语法访问对应的value

  5、for...of循环

  

iter = ['a', 'b', 'c'];
for (i in iter) {
    console.log(iter[i])
}    
//1.用于遍历可迭代对象:遍历结果为index,通过[]语法访问对应的value
//2.ES6新增,可迭代对象有 字符串、数组、 Map、Set、Anguments、NodeList等

  6、break, continue关键词

  break: 结束本层循环

  continue: 结束本次循环进入下一次循环

  三 、异常处理

  

try {
    易错代码块;
} catch (err) {
    异常处理代码块;
} finally {
    必须逻辑代码块;
}
//1.err为存储错误信息的变量
//2.finally分支在异常出现与否都会被执行
throw "自定义异常"
// 必要的时候抛出自定义异常,要结合对应的try...catch使用

  四、函数初级

  1.函数的定义

  ES5

  

function 函数名 (参数列表) {
   函数体; 
}

var 函数名 = function (参数列表) {
   函数体; 
}

  ES6

  

let 函数名 = (参数列表)=> {
   函数体; 
}

  匿名函数

  

function (参数列表) {
    函数体;
}
// 匿名函数需要自调用
(function (参数列表) {
    函数体;
})(参数列表);

  2、函数的调用

  函数名(参数列表)

  3、函数的参数

  个数不需要统一

function fn (a,b,c) {
      console.log(a,b,c) // 100  undefined undefined          
}
fn(100)

function fn(a) {
       console.log(a)    //100
}
fn(100, 200, 300)    // 200,300被丢弃

  可以任意位置具有默认值

  

function fn (a, b = 20, c, d = 40) {
      console.log(a, b, c, d)  // 100 200 300 40  
}
fn(100, 200, 300)

  通过...语法接收多个值

function fn (a, ...b) {
        console.log(a, b) // 100 [200 300]
}
fn(100, 200, 300)
// ...变量必须出现在参数列表最后

  4、返回值

  

function fn() {
    return 返回值;
}
// 1.可以空return操作, 用来结束函数
// 2.返回值可以为任意js类型数据
// 3.函数最多只能拥有一个返回值

  五、事件初级

  onload: 页面加载完毕事件, 只附属于window对象

  onclick: 鼠标点击时间

  onmouseover: 鼠标悬浮事件

  onmouseout: 鼠标移开事件

  六、 js选择器

  1、 getElement系列

  // 1.通过id名获取唯一满足条件的页面元素

  document.getElementByid('id名');

  // 该方法只能由document调用

  // 2.通过class名获取所有满足条件的页面元素

  document.getElementsByClassName('class名');

  // 该方法可以由document及任意页面元素对象调用

  // 返回值为HTMLCollection (一个类数组结果的对象,使用方式同数组)

  // 没有匹配到任何结果返回空HTMLCollection对象([])

  // 3.通过tag名获取所有满足条件的页面元素

  document.getElementsByTagName('tag名');

  // 该方法可以由document及任意页面对象调用

  // 返回值为HTMLCollection (一个类数组结果的对象,使用方式同数组)

  // 没有匹配到任何结果返回空HTMLCollection对象 ([])

  2.querySelect系列

  // 1.获取第一个匹配到的页面元素

  document.querySelector('css语法选择器');

  // 该方法可以由document及任意页面对象调用

  // 2. 获取所有匹配到的页面元素

  document.querySelectorAll('css语法选择器');

  // 该方法可以由document及任意页面对象调用

  // 返回值为NodeList (一个类数组结果的对象,使用方式同数组)

  //没有匹配到任何结果返回空NodeList对象([])

  3.id名

  可以通过id名直接获取对应的页面元素对象,但是不建议使用

  七、JS操作页面内容

  innerText: 普通标签内容(自身文本与所有子标签文本)

  innerHTML:包含标签在内的内容(自身文本及子标签的所有)

  value:表单标签的内容

  outerHTML:包含自身标签在内的内容 (自身标签及往下的所有)

  八、 JS操作页面样式

  读写style属性 样式

  

div.style.backgroundColor = 'red';
// 1.操作的为行间式
// 2.可读可写
// 3.具体属性名采用小驼峰命名法

  只读 计算后样式

  

// eg: 背景颜色
// 推荐
getComputedStyle(页面元素对象,伪类).getPropertyValue('background-color');
// 不推荐
getComputedStyle(页面元素对象,伪类).backgroundColor;

// IE9以下
页面元素对象.currentStyle.getArribute('background-color');
页面元素对象.currentStyle.backgroundColor;

// 1.页面元素对象由JS选择器获取
// 2.伪类没有的情况下用null填充
// 3.计算后样式为只读
// 4.该方式依旧可以获取行间式样式 (获取逻辑最后的样式)

  结合css操作样式

  

页面元素对象.className = ""; // 清除类名
页面元素对象.className = "类名";  //设置类名
页面元素对象.className += "类名"; // 添加类名

  八、事件的两种绑定方式

  1、on事件绑定方式

  

document.onclick = function() {
      console.log("文档点击"); 
}
// on事件只能绑定一个方式,重复绑定保留最后一次绑定的方法
document.onclick = function() {
        console.log("文档点击");
}
// 事件的移除
document.onclick = null;

  2、非on事件绑定方式

  

document.addEventListener('click', function() {
      console.log('点击1');
})
document.addEventListener('click', function() {
       console.log('点击2');
})
// 非on事件可以同时绑定多个方法,被绑定的方法依次被执行
// addEventListener第三个参数(true|false)决定冒泡的方式
function fn() {}
document.addEventListener('click', fn);
// 事件的移除
document.removeEventListener('click', fn);

  九、事件参数event

  存放事件信息的回调参数

  十、事件的冒泡与默认事件

  事件的冒泡:父子都具有点击事件,不处理的话,点击子级也会触发父级的点击事件

  

<body id = "body">
    <div id = "sup">
        <div id = "sub"></div>
    </div>
</body>

<sript>
sub.onclick = function(ev) {
        // 方式一
        ev.stopPropagation();
        console.log("sub click");        
}
sup.onclick = function (ev) {
        // 方式二
        ev.cancelBubble = true;
        console.log("sup click");    
}
body.onclick = function (ev) {
        console.log("sup click")
}
</script>            

  默认事件:取消默认的事件动作,如鼠标右键菜单

<body id="body">
       <div id="sup">
        <div id="sub"></div>
    </div>
</body>

<script>
sub.oncontextmenu = function (ev) {
    // 方式一
    ev.preventDefault();
    console.log("sub menu click");
}
sup.oncontextmenu = function (ev) {
    console.log("sup menu click");
    // 方式二
    return false;
}
body.oncontextmenu = function (ev) {
    console.log("body menu click");
}
</script>

  十一、鼠标事件

  

onclick: 鼠标点击
ondblclick: 鼠标双击
onmousedown: 鼠标按下
onmousemove: 鼠标移动
onmouseup: 鼠标抬起
onmouseover: 鼠标悬浮
onmouseout: 鼠标移开
oncontextmenu: 鼠标右键

  事件参数ev

ev.clientX: 点击点x坐标
ev.clientY: 点击点Y坐标

  十二、键盘事件

onkeydown: 键盘按下
onkeyup: 键盘抬起

事件参数ev

ev.keyCode: 按键编号
ev.altKey: alt特殊按键
ev.ctrlkey: ctrl特殊按键
ev.shiftKey: shift特殊按键

  十三、表单事件

  

onfocus: 获取焦点
onblur: 失去焦点
onselect: 文本被选中
oninput: 值改变
onchange: 值改变,且需要在失去焦点后才能触发
onsubmit: 表单默认提交事件

  十四、文档事件

   文档事件由window调用

onload: 页面加载成功
onbeforeunload: 页面退出或刷新警告,需要设置回调函数返回值,返回值随意

  十五、图片事件

  

onerror: 图片加载失败

  十六、页面事件

onscroll: 页面滚动
onresize: 页面尺寸调整
window.scrollY:页面下滚距离

  十七、函数高级

  闭包

  

function outer() {
    var data = {}
    function inner() {
        return data;
    }
    return inner;
}
// 闭包目的: 不允许提升变量作用域时,该函数的局部变量需要被其他函数使用
// 闭包本质: 函数的嵌套,内层函数称之为闭包
// 闭包的解决案例: 1.影响局部变量的生命周期,持久化局部变量;2.解决变量污染

  十八、循环绑定

.html 文件
<ul>
    <li>列表项</li>
    <li>列表项</li>
    <li>列表项</li>
</ul>
.js文件
var lis = document.querySelector('li');
for (var i = 0; i < lis.length; i++) {
    lis[i].onclick = function () {
        //打印列表项的索引
        console.log(i);
    }
]
//变量污染
//获取局部作用域解决
//闭包解决
//对象属性解决

  十九、面向对象JS

  1、属性与方法

  

var obj = {}; | var obj = new Object();
// 属性
obj.prop = "";
// 方法
obj.func = function () {}
// 删除属性与方法
delete obj.prop
delete obj.func

  2、类字典结构使用

  结构

  

var dict = {name: "zero",age:18}

  拓展

var dict = {"my-name":"zero",fn:function () {},fun() {}}

  使用

dict.name | dict["my-name"] | dict.fn()

  3、构造函数 (ES5)

function People(name,age) {
    this.name = name;
    this.age = age;
    this.eat = function() {
        return 'eat';
    }
}

  4、类及集成(ES6)

class People {
    // 构造器
    constructor (name, age) {
        this.name = name;
        this.age = age;
    }
    // 实例方法
    eat () {
        console.log('吃吃吃');
    }
    // 类方法
    static create () {
        console.log('诞生');
    }
}

  

原文地址:https://www.cnblogs.com/xiaocaiyang/p/10146153.html