JS学习笔记

#JS对象

一个具体的事物

有属性和方法组成,<br>

**创建对象的方式**<br>

1. 函数字面量<br>

2. new Object创建对象<br>

3. 构造函数:就是把对象里面相同的属性和方法抽象出来封装到函数里面<br>

   构造函数名字首字母大写

不需要return就可以返回对象<br>

调用构造函数必须使用new<br>

var zxs = new Star('','','')<br>

> function Zero(name,age,gj) {

            this.name = name;  

            this.age = age;  

            this.gj = gj;  

        }  

        var lianpo = new Zero('廉颇',20,'法术');  

        var xiangxu = new Zero('项羽',23,'攻击');  

        console.log(lianpo,xiangxu);

**简易计算器** <br>

//

        function input(operation) {

            var num1 = parseInt(prompt('请输入第一个数值:'))

            var num2 = parseInt(prompt('请输入第二个数值:'))

            if (operation == '+') {

                return num1 + num2

            } else if (operation == '-') {

                return num1 - num2

            } else if (operation == '*') {

                return num1 * num2;

            } else {

                return num1 / num2

            }

        }

        do {

            var num = parseInt(prompt('欢迎使用计算器:\n1.加法运算;\n2.减法运算;\n3.乘法运算;\n4.除法运算;\n5.退出;\n请输入您的选项:'));

            switch (num) {

                case 1:

                    alert(input('+'))

                    break

                case 2:

                    alert(input('-'))

                    break

                case 3:

                    alert(input('*'))

                    break

                case 4:

                    alert(input('/'))

                    break

            }

        } while (num != 5)

        alert('正在退出。。。')//利用do-while实现实现简易计算器的首页可循环出现,不退出就一直进行计算

#JS对象分为三种  

1. ##自定义对象

1. ##内置对象

1. ##浏览器对象

MDN(推荐)、 W3Shool  

####查阅文档 <br>

##Math()

    function getRandom(min,max) {

    return Math.floor(Math.random() * (max - min +1)) + min;

    }

    var random = getRandom(1, 10);

返回随机范围内整数

##Date()

###Date() 日期对象,是一个构造函数,必须使用new 来调用创建我们的日期对象

    var arr = new Date();

####如果没有参数,返回当前系统时间

##倒计时

          //倒计时

        function countDown(time) {

            var nowTime = +new Date();  //时间戳

            var inputTime = +new Date(time);

            var times = (inputTime - nowTime)  / 1000;

            var d = parseInt(times / 60 / 60 /24);  //天

            d = d < 10 ? '0' + d : d;

            var h = parseInt(times / 69 / 60 % 60);   //时

            h = h < 10 ? '0' + h : h;

            var m = parseInt(times / 60 % 60);   //分

            m = m < 10 ? '0' + m : m;

            var s = parseInt(times % 60)   //秒

            s = s < 10 ? '0' + s : s;

            return d  + '天' + h + '时' + m + '分' + s  + '秒';

        }

        console.log(countDown('2022-5-1 18:00:00'));

        var date = new Date();

        console.log(date);

##Array()

     var arr1 = new Array(2);   //这个2 表示数组的长度为2 ,里面有2 个空的数组元素

        var arr1 = new Array(2,3);   //这个2 ,3 表示里面有两个为2,3的元素

####instanceof 用来检测是否为数组

     1 . console.log(arr instanceof Array);  //返回为true

     2 . console.log(Array.isArray(obj));  //返回为false   H5新方法 IE9以上版本支持

####添加数组元素

    1 . var arr = [2,3,4];

        console.log(arr.push(4,'pink'));  //返回新数组的长度

        console.log(arr);   //返回数组元素

    //push是可以给数组追加新的元素

    //push(参数1,参数2,...) 参数直接写数组元素就可以了

    //push完成之后,返回的结果是新数组的长度

    //原数组也会发生变化

    2 . arr.unshift('red',3); //在数组前面参加元素,与push 用法相同



 

####删除数组元素

       1 . console.log(arr.pop());  //返回被删除的数组 一次只能删除一个元素

       2 . arr.shift();  //删除数组元素的第一个元素

                   //pop() 和 shift() 都没有参数,一次只能删除一个元素,pop()从数组最后删除,shift()从第一个删除,

####筛选数组

    var arr = [2344,232,24324,23];

       var newArr = [];

       for ( var i = 0; i < arr.length; i++) {

           if(arr[i] < 2000){

               newArr.push(arr[i]);  //筛选数组内小于2000的元素

           }

       }

       console.log(newArr);

####翻转数组

     var arr = ['pink','red','yellow'];

      arr.reverse();

####冒泡排序

        var arr1 = [2,3,4,5,2];

          arr1.sort();  //只能拍单位数,,



 

    var arr1 = [2,3,4,5,2];           //双数冒泡

        arr1.sort(function(a,b){

           return a - b;  //升序排序

           return b - a;  //降序排序

       });

####返回数组索引号

    var arr1 = [2,3,4,5,2];

       console.log(arr1.indexOf(3));   //返回数组元素的索引号,只返回第一个满足条件的数组

       //如果没有满足条件的返回 -1

    console.log(arr1.lastIndexOf(3));   //从后面查找 返回最后一个满足条件,找不到返回 -1


 

**案例:数组去重**

          // 遍历就数组,然后拿着就数组的元素去查询新数组,

        // 如果该元素在新数组里面没有出翔过,就添加,否则不添加

        function unique(arr) {

            var newArr = [];

            for(var i = 0; i < arr.length ; i++) {

                if(newArr.indexOf(arr[i]) === -1){

                    newArr.push(arr[i]);

                }

            }

            return newArr;

        }

        var demo = unique(['c','v','c','f','g','r','f'])

        console.log(demo);   //打印(5) ['c', 'v', 'f', 'g', 'r']

#### 数组转化为字符串、

    ######1. toString()  把数组转换为字符串,都好分隔每一项

    ######2. join('分隔符')  方法用于数组中所有元素转换为一个字符串

        var arr = [1,4,3];

        console.log(arr.toString());    //1,4,3

        console.log(arr.join('-'));   //1-4-3

####数组对象

    //concat() 连接两个或多个数组,不影响原数组

    //slice()  数组截取 slice(begin,end)

    //splice() 数组删除 splice[第几个开始,要删除几个]

    const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];

##字符串

####基本包装类型:

#####把简单数据类型包装成复杂数据类型(加了new的)

            var str = 'andy';

       

        //对象才有属性和方法,简单数据类型str 为什么会有length属性呢

        //1 把简单数据类型包装成复杂数据类型

        var temp = new String('andy');

        //2 把临时变量的值 给 str

        str = temp;

        //3 销毁这个临时变量

        temp = null;

####字符串不可变

#####所以不要大量拼接字符串,内存不释放,新拼接的字符串会新开辟空间

######根据字符返回位置

    //字符串所有的方法,都不会修改字符串本身(字符串是不可变的),操作完成后会返回一个新的字符串


 

- indexOf('要查找的字符',开始的位置)  返回指定内容在原字符中的位置,如果找不到就返回-1 ,开始的位置是index索引号,

- lastIndexOf() 从后往前,执照第一个匹配的元素

**案例:返回字符串的位置和数量**

    //查找字符串"abejbaahjdjsafjdsbcabmfew"中所有的 a 出现的位置及次数

    //核心算法: 先查找第一个 a 出现的位置

    //然后 只要indexOf 返回的结果不是 -1 就继续查找

    //因为indexOf 只能查找到第一个满足条件的元素,所以后面的查找,一定是当前索引 +1 ,从而继续查找

    var str = "abejbaahjdjsafjdsbcabmfew";

    var index = str.indexOf('a');

    while(index !==  -1) {

            console.log(index);

            num++;

            index =  str.indexOf('a');

        console.log('a 出现的次数:' + num);

####根据位置返回字符(重点)

- charAt(index)  返回指定位置的字符(index字符串的索引号)

- charCodeAt(index)   获取指定位置字符的ASCII码,***可以用来判断用户输入了什么***

- str[index]  获取指定位置的字符  **H5新增,IE8支持**

####统计出现次数最多的字符

        var str = "abejbaahjdjsafjdsbcabmfew";

        var o = {};

        for(var i = 0;i < str.length ;i++){

            var chars = str.charAt(i);

            if(o[chars]) {      //o[chars]得到的是属性值

                o[chars]++;

            }else {

                o[chars] = 1;

            }

        }

        console.log(o);

            //遍历对象

        var max = 0;

        var ch = '';

        for (var k in o){    //k 得到的是属性名 , o 得到的是属性值

            if( o[k] > max){

                max = o[k];

                ch = k;

            }

        }

        console.log('最大次数为' + max + '最多的字符为' + ch);

####替换字符串

        var str = "abejbaahjdjsafjdsbcabmfew";

        console.log(str.replace('a','b'));   //把第一个a 替换为b

        var str1 = "abejbaahjdjsafjdsbcabmfew";

        while(str1.indexOf('a') !== -1){

            str1 = str1.replace('a','b');   //把所有的a 替换为b

        }

        console.log(str1);

####字符串转换为数组

        var str1 = 'red,pink,blue'; //以逗号隔开使用split(',')

        console.log(str1.split(','));   //打印(3) ['red', 'pink', 'blue']

####字符串转换大小写

        console.log(str1.toUpperCase());  //转换为大写

        console.log(str1.toLowerCase());   //转换为小写

##JS总结

null返回类型为Object,空对象,

<br>如果有个变量我们以后打算存储为对象,但是还没想好存啥,可以将其设为null

<br> **简单数据类型**:放到栈里面,里面直接开辟一个空间,存放的是值<br>

**复杂数据类型**:首先在栈里面存放地址,这个地址指向堆里面的数据,真正的数据全放在堆里面

<br>

        function Person(name) {

            this.name = name;

        }

        function f1(x) {     //p的地址给了x

            console.log(x.name);    //打印刘德华

            x.name = "张学友";

            console.log(x.name);   //打印张学友

        }

        var p = new Person("刘德华");

        console.log(p.name);    //打印刘德华

        f1(p);

        console.log(p.name);   //打印张学友


 

#####案例:根据时间更换图片

        <img src="./images/icon_error.png" alt="">

   

    <div>

        </div>

    <script>

        var img = document.querySelector('img');

        var div = document.querySelector('div');

        var date = new Date();

        var h = date.getHours();

        if (h <12) {

            img.src = './images/logo.png';

            div.innerHTML = '上午好';

        }else if(h <18) {

            img.src= './images/icons.png';

            div.innerHTML = '下u我好';

        }else {

            img.src = './images/recom.png';

            div.innerHTML = '晚上好';

        }

    </script>


 

改变表单内容

利用DOM可以操作如下表单属性

**type,value,checked,selected,disabled**

    <button>按钮</button>

    <input type="text" value="孩子">

    <script>

        var btn = document.querySelector('button');

        var input = document.querySelector('input');

        btn.onclick = function() {

            input.value = '你好';

        }

    </script>


 

**案例:按钮多次点击不同效果**

###### 利用flog

    <input type="password">

    <img src="./images/logo.png" alt="">

    <script>

        var input = document.querySelector('input');

        var img = document.querySelector('img');

        var flog = 0;

        img.onclick = function() {

            if(flog == 0) {

               input.type = 'text';

               flog = 1;

            }else {

                input.type = 'password';

                flog = 0;

            }  

        }


 

##### JS行内样式权重高,会替换原来的

##### 案例:点击关闭广告

    <div></div>

    <img src="./images/icons.png" alt="">

    <script>

        var div = document.querySelector('div');

        var img = document.querySelector('img');

        img.onclick = function() {

            div.style.display = 'none';

        }

    </script>

##### 表单获得/失去焦点

######获得焦点 onfocus ,失去焦点 onblur

##### 通过className更改元素的样式,适合样式较多或者功能复杂的情况

###### 会覆盖原先的 ,解决多类名选择器,this.className = 'nav change'

        <style>

            .change {

             color: aqua;

             font-size: 24px;

            }

        </style>

        <div>文本</div>

        <script>

            var text = document.querySelector('div');

            text.onclick = function() {

                this.className = 'change';

            }

        </script>


 

#### 案例:全选按钮

    <div>

        <table>

            <tr>

                <th><input type="checkbox" id="j_cbAll"></th>

                <th>商品</th>

            </tr>

            <tbody id="j_tb">

                <tr>

                    <td><input type="checkbox"></td>

                    <td>京东</td>

                </tr>

                <tr>

                    <td><input type="checkbox"></td>

                    <td>京东</td>

                </tr>

                <tr>

                    <td><input type="checkbox"></td>

                    <td>京东</td>

                </tr>

                <tr>

                    <td><input type="checkbox"></td>

                    <td>京东</td>

                </tr>

            </tbody>

        </table>

    </div>

    <script>

    var table = document.getElementById('j_cbAll');

    var j_tb = document.getElementById('j_tb').getElementsByTagName('input');

    table.onclick = function () {

        for (var i = 0; i < j_tb.length; i++) {

            j_tb[i].checked = this.checked;

        }

    }

    for (var i = 0; i < j_tb.length; i++) {

        j_tb[i].onclick = function () {

            var flog = true;

            for (var i = 0; i < j_tb.length; i++) {

                if (!j_tb[i].checked) {

                    flog = false;

                    break;

                }

            }

            table.checked = flog;

        }

    }

    </script>

#### 创建节点

        //创建元素

        var li = document.createElement('li');

        var ul = document.querySelector('ul');

        //直接添加到ul后面

        ul.appendChild(li);

        //指定位置添加li

        ul.insertBefore(li, ul.children[0]);

#### 添加/删除评论

        var input = document.querySelector('textarea');

        var btn = document.querySelector('button');

        var ul = document.querySelector('ul');

       

        btn.onclick = function() {

            var li = document.createElement('li');

            if(!input.value){

                alert('请输入内容');

            }else {

                ul.insertBefore(li,ul.children[0]);

                li.innerHTML = input.value + "<a href='javascript:;'>×</a>";

                input.value = '';

                var as = document.querySelectorAll('a');

                for(var i =0;i<as.length;i++){

                    as[i].onclick = function() {

                        //删除父亲的孩子

                        ul.removeChild(this.parentNode);

                    }

                }

            }

        }


 

#### 复制节点 ***

        var ul = document.querySelector('ul');

        //1.node.cloneNode(); 括号为空或者里面是false时,浅拷贝,只复制标签不复制里面的内容

        //2.node.cloneNode(); 括号为true时,深拷贝,复制标签又复制内容

        btn.onclick = function() {

            var li = ul.children[0].cloneNode(true);

            ul.appendChild(li);

        }


 

#### 动态生成表格

        var tbody = document.querySelector('tbody');

        for(var i= 0;i <datas.length;i++){

            var tr = document.createElement('tr');

            tbody.appendChild(tr);

            for(var k in datas[i]){

                var td = document.createElement('td');

                td.innerHTML = datas[i][k];

                tr.appendChild(td);

            }

        }

#### 删除表格

        //接上面

        var td = document.createElement('td');

            td.innerHTML = "<a href='javascript:;'>删除</a>";

            tr.appendChild(td);

        }

        var as = document.querySelectorAll('a');

        for (var i = 0; i < as.length; i++) {

            as[i].onclick = function () {

                tbody.removeChild(this.parentNode.parentNode);

            }

        }

#### 三种动态创建元素的区别

- document.write() 是直接将内容写入页面的内容流,但是文档流执行完毕,则它会导致页面全部重绘

- element.innerHTML是将内容写入某个DOM节点,不会导致页面全部重绘

- innerHTML创建多个元素凶啊率更高(不要拼接字符串,采取数组形式拼接),结构稍微复杂

- createElement() 创建多个元素效率稍低一点点,但是结构清晰

###DOM重点核心

文档对象模型,是W3C组织推荐的处理可扩展标记语言的标准编程接口

W3C已经定义了一系列的DOM接口,通过这些DOM接口可以改变网页的内容,结构和样式

- 1.对于JavaScript,为了能够使JavaScript操作HTM,就有了一套自己的dom编程接口

- 对于HTML,dom是的HTML形成一棵dom树,包含文档、元素、节点

**增:**

- appenChild

- insertBefore


 

**删:**

- removeChild

**改:主要修改dom元素属性,dom元素的内容、属性、表单的值等**

- 修改元素属性:src、href、title等

- 修改普通元素的内容:innerHTML、innerText

- 修改表单元素:value、type、disabled等

- 修改元素样式:style、className

**查:主要获取擦汗寻dom元素**

- DOM提供的API方法:getElementById、getElementByTagName古老用法不太推荐

- H5提供的新方法:querySelector、querySelectorAll

- 利用系欸但操作获取元素:父(parentNode)、子(children)、兄(previousElementSibling、nextElementSibling)提倡

**属性操作:主要针对自定义属性**

- setAttribute:设置dom的属性值

- getAttribute:得到dom的属性值

- removeAttribute:移除属性

**事件操作:给元素注册事件、采取事件源+事件类型=事件处理程序**

- onclick\onmouseover\onmouseout\onfocus\onblur\onmousemove\onmouseup\onmousedown


 

### 事件高级

#### 注册事件

- 传统注册方式,利用btn.onclick = function() {},

特点:注册事件的唯一性

同一个元素同一个事件只能设置一个处理函数,最后注册的处理函数将会覆盖前面注册的处理函数

- 方法监听注册方式

  是W3C标准 推荐方式

  addEventlistener()

  IE9之前不支持此方法,可使用attachEvent()代替

  同一个元素同一个事件可以注册多个监听

#### addEventlistener()事件监听方式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
黑马Node.js学习笔记是一本关于Node.js学习资料,其中包含了关于模块化规范的内容。模块化规范是对代码进行模块化的拆分与组合时需要遵守的规则。在Node.js中,模块可以分为内置模块、自定义模块和第三方模块。内置模块是由Node.js官方提供的,例如fs、path、http等。自定义模块是用户创建的每个.js文件,可以通过require方法加载。第三方模块是由第三方开发的模块,需要先下载后才能使用。在每个.js自定义模块中都有一个module对象,它存储了和当前模块有关的信息。注意,在同一个模块中不要同时使用exports和module.exports。在Node.js中,加载某个模块实际上是加载该模块的module.exports属性。npm是Node.js中的包管理工具,可以用于下载和管理第三方模块,而第三方模块也被称为包。总之,黑马Node.js学习笔记提供了关于Node.js模块化规范的详细解释和使用方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [黑马程序员node.js学习笔记](https://blog.csdn.net/weixin_50523986/article/details/129937301)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值