复习-JS

基础规则

命名规则

小驼峰:变量、方法

大驼峰:类、构造函数

全大写:常量

全小写:css样式类

JS基础

js组成:

DOM+BOM+ECMAScript。(DOM+BOM主要在api阶段学)

输入输出

prompt  输入语句,返回值是字符串

变量

变量声明特殊情况:

不声明 不赋值 直接使用 报错如下图:xxx is not defined

命名规范

重点:驼峰命名法、区分大小写、字母数字下划线美元

数据类型

数字

数字类型

范围:

isNAN

数据类型转换

转换为字符串:

转换为数字:

  • 如果 遇到字符开头,parceInt()/parceFloat 会出现NAN

  • 如果但凡遇到字符,Number() 结果都会变成 NAN

运算符

浮点运算问题(浮点运算结果不准确问题)

   浮点数判断相等 解决办法:

运算符优先级

流程运算符

判断闰年案例:

switch 与 if-else if-else 的区别:前者效率高

打断点

打断点之后记得刷新一下

循环

while  do...while:可以做复杂判断

continue  break

数组

创建数组

JS中数组的数组项的类型,数组元素类型没有限制

遍历数组

数组去除指定元素:

反转数组

冒泡排序:

利用sort排序

快速排序:

return:

如果 return 两个值,那么最终返回的是两个中的哪一个呢?返回第二个数。

函数

⭐arguments

arguments作为函数的内置对象,存储函数参数,以伪数组的形式存储

伪数组:

①以索引的方式存储

具有数组的length属性

③不具有数组的 pop push  等方法

伪数组→数组

①[...伪数组] (ES6)

②Array.from(伪数组)  (ES6)

定义函数的方法

① function fn( ) { }

② var fn = function ( ) { }  (匿名函数)

③ var fn = ( ) => { }  (ES6)

函数调用

①:obj.fn()

②:obj.fn.call({  name: "Tom" })

对象

构造函数

构造函数要使用new来调用

②构造函数首字母得是大写

构造函数没有 return ,但是仍然有返回值

new关键字

内置对象

Math对象

ps:中括号参数,表示参数可有可无

Math.PI

Math.max( )    (遇到非数字的会报NAN、如果不传参数就是-infinity)

Date对象

①Date(): 

如果不传参数,则返回当前时间。如果传参则返回目标时间。注意,传参的时候,前面的new关键字不能丢

②Date.prototype.xxx

getMonth:返回的月份 小一个月

getDay:周一对应1,周六对应6,周日对应0

③时间戳

 1、时间戳单位毫秒,时间戳除以1000得到秒

2、时间戳可以传参,传递参数的话,返回当时的时间戳
 3、

数组对象

  1. 判断数组类型:instanceOf instanceof
  2. 添加删除数组元素:push unshift  pop shift

数组,根据索引查找元素

    3. 数组去重

     ①算法:遍历旧数组,拿旧数组元素查询新数组,如果新数组内没有该元素则添加,否则不添加,

     ②:我们怎么知道有没有该元素存在?利用   新数组 . indexOf(元素) 。如果返回值是-1,则表示新数组内没有该元素。

 

字符串对象

  • 字符串操作方法:substr (重点)

  • 字符串变数组:split ( 分隔符)
  • 字符串的不可变性因此尽量不要用字符串拼接

字符串案例

  • 字符串 根据索引查找元素:

  • 某个字符出现的位置以及次数

  • 根据位置返回字符

案例:求出现次数最多的字符

核心算法:把每个字符都给到对象的属性,每遇到一次就将属性的值加1

怎么判断对象有没有那个属性?

预解析

预解析之前                                                                预解析之后

         

JS高级

类和对象

创建类

构造函数

constructor 方法是类的构造函数,用于传递参数,返回实例对象,通过new命令生成对象实例时,自动调用该方法。如果没有定义该方法,我们会自动创建一个constructor()

super

  • super ( ) 调用父类的构造函数,可以传参
  • super. sing() 调用父类中的普通函数
  • super必须得在子类this之前调用

调用父类构造函数,这样子构造函数的x,y就指向夫构造函数了,然后子类就可以调用父类的方法了

子类调用父类的普通函数

super必须写在构造函数的最前面

this指向问题

谁调用指向谁,button调用指向button

案例:tab栏切换

思路:1、准备结构   2、将tab抽象成类,将tab栏的操作(曾、删、改、查)抽象成类的方法    3、通过new实例化目标DOM标签   3、在构造函数内获取到目标DOM元素,这样就可以在类里面对DOM元素进行操作了

4、实现tab栏切换功能: ① 在init方法中,给所有 导航栏 / 内容页 / 按钮 绑定上事件(toggleTabbar函数)、编辑事件...;

                                        ② 其次在toggleTabbar函数书写事件

                                        ③ 最后 在构造函数中调用 init

5、实现添加功能:① 在init方法中,给所有按钮 绑定上事件添加事件(addTab函数)...;

                               ② 其次在addTab函数创建元素,添加进DOM元素(注意,添加元素后需要重新获取DOM元素,将重新获取到的DOM元素放到类上)

                               ③ 最后 在构造函数中调用 init

注意事项:原生JS必须注意script的书写位置。① 在结构准备好之后引入script标签,② 或者在js文件最开始用入口函数入口函数

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./styles/tab.css">
    <link rel="stylesheet" href="./styles/style.css">
    <script src="./js/tab3.js"></script>
</head>

<body>
    <div class="tabsbox" id="tab">
        <nav class="firstnav">
            <ul>
                <li class="liactive">新闻</li>
                <li>发现</li>
                <li>主页</li>
            </ul>
            <div class="tabadd">
                <button>+1</button>
            </div>
        </nav>
        <div class="tabscon">
            <section class="conactive">新闻页</section>
            <section>发现页</section>
            <section>主页</section>
        </div>
    </div>
</body>

</html>
window.onload = function () {
    var that;
    class Tabbar {
        constructor(id) {
            that = this
            this.main = document.querySelector(id);
            this.lis = this.main.querySelectorAll('li');
            this.sections = this.main.querySelectorAll('section');
            this.addtab=this.main.querySelector('.tabadd')
            this.ul=this.main.querySelector('.firstnav ul')
            this.tabscon=this.main.querySelector('.tabscon')
            this.init()
        }
        init() {
            // 给DOM元素绑定方法
            // console.log(this.lis)
            for (let i = 0; i < this.lis.length; i++) {
                this.lis[i].index = i;
                this.lis[i].onclick = this.toggleTab //区分函数绑定 于 函数调用
            }
            this.addtab.onclick=this.addTab


        }
        toggleTab() {
            // 第i个小li调用的toggleTab,那么this指向第i个小li
            // console.log(that.lis)
            that.clearClass()
            this.className = "liactive"
            that.sections[this.index].className="conactive"
        }
        addTab() {
            that.clearClass()
            let li ='<li class="liactive">新闻</li>'
            let section ='<section class="conactive">'+Math.floor((Math.random())*100)+'</section>'
            that.ul.insertAdjacentHTML('beforeend',li)
            that.tabscon.insertAdjacentHTML('beforeend',section)

            that.lis = that.main.querySelectorAll('li');
            that.sections = that.main.querySelectorAll('section');
            // console.log(that.lis)
            that.init()
         }
        editTab() { }
        clearClass(){
            // console.log(this.lis)
            for (let i = 0; i < this.lis.length; i++) {
                this.lis[i].className=''
                this.sections[i].className=''
            }
        }
    }
    new Tabbar('#tab')
}

new的作用

实例成员 静态成员

实例成员:

静态成员:⭐静态成员只能通过过构造函数访问

Prototype

prototype:① 原型是一个对象   ② 原型的作用是共享方法 

Constructor构造函数

对象原型、原型对象里面的constructor都是指回自己的构造函数

this指向问题

无论构造函数的this还是原型对象的this都是指向 实例化对象

Web-api

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值