JavaScript笔记

JavaScript

1.快速入门

1.1.第一个JavaScript程序

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--    内部引入-->
<!--    <script>-->
<!--        alert('Hello World');-->
<!--    </script>-->

<!--    外部引入-->
    <script src="js/firstJavaScript.js"></script>
</head>
<body>
</body>
</html>
alert("Hello world");

1.2.基本语法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        // 1.变量
        var num=1;
        var name="mashiro";
        // 2.条件控制
        if (true){
            "...";
        }else if (true){
            "...";
        }else{
            "...";
        }
        // 3.控制台打印变量 console.log(xxx);
    </script>
</head>
<body>

</body>
</html>

1.3.数据类型

  • 数值 numbre
// 普通数
111;
111.23;
1.7e10;
-98;
// Not a Number 
NaN; 
// 无穷大
Infinity;
  • 字符串
'ABC' "ABC" '\n'
  • boolean
true false
  • 逻辑运算
&&,||,!
  • 比较运算
=     //赋值

==    //等于(类型不一样,值一样,为true)

===   //绝对等于(类型一样,值一样,为true)

NaN 不等于所有数,包括自己.判断NaN:isNaN(NaN)
  • null undefine
null: 空
undefined:未定义
  • 数组 []
var arr = [1,2,3,'A',"ABC",true];
  • 对象 {}
var person  = {
        name:"mashiro",
        age:8,
        tags:"java"
};

1.4.严格检查模式

'use strict'; 
let i = 1;

2.数据类型

2.1.字符串

  • 定义一个字符串用单引号或双引号包裹
  • 注意转义字符 \
  • 多行字符串
    <script>
        'use strict'
        let string = `javascript
        hello
        wrold
        ~
        `
    </script>
  • 模板字符串
    <script>
        'use strict'
        let name = 'mashiro';
        let age = 3;

        var string = `hello,${name}`;
        console.log(string)

    </script>
  • 字符串长度
       console.log(student.length)
  • 字符串下标
        console.log(student[1]);
  • 大小写切换
        console.log(student.toUpperCase());
        console.log(student.toLowerCase());
  • indexOf()
        console.log(student.indexOf('u'));
  • subString()
        /*从第一个字符开始到第三个字符(不包含第三个)[1,3)*/
        console.log(student.substring(1,3));

2.2.数组

Array可以包含任意的数据类型

        var arr=[1,2,3,4,5,6]
  • 长度
        console.log(arr.length);
        //可以给arr,length赋值。
  • indexOf
        console.log(arr.indexOf(2));
  • slice
        console.log(arr.slice(1,5)); // 类似字符串中的subString()
  • push & pop (类似出入栈)
        arr.push(7);
        arr.pop();
  • unshift & shift
        arr.unshift(7,8);   // 在数组头部压入元素
        arr.shift();        // 弹出数组头部元素
  • 排序 & 反转
        arr.sort();    // 排序     
        arr.reverse();  // 反转
  • 数组拼接
        arr.concat(arr2)
  • 连接符
        // 打印数组,并使用‘-’符号连接
        arr2.join('-');
  • 多维数组
        var arr3 = [[1,2],[3,4],[5,6]]

2.3.对象 【若干个键值对】

        var user = {
            name: 'mashiro',
            age: 18,
            password: '123456'            
        }
  • 对象赋值
        user.age = 20;
  • 使用不存在的属性,不会报错
        user.email
        //undefined
  • 动态删减属性
        delete user.name
  • 动态添加属性【直接给新的属性添加值即可】
        user.email = '111@163.com'        
  • 判断字段是否在对象中
        'age' in user
        //true
        'toString' in user
        //true
  • 判断字段是否在原生对象中
        user.hasOwnProperty('age')
        //true
        user.hasOwnProperty('toString')
        //false

2.4.Map & Set (ES6新特性)

  • Map
        var map = new Map([['mashiro',100],['nagisa',90],['makoto',80]]);
        var value = map.get('mashiro'); // 通过key获得value
        map.set('admin',111);   // 给map添加值
        console.log(value);
  • Set
        var set = new Set([3,1,4,1,2]);
        set.add(5);
        set.delete(1);
        set.has(3); // true

2.5.Iterator

  • for-in & for-of
        let arr = [10,9,8,6,7,5,3,21,54,0];
        // 打印所有元素的下标
        for (let number in arr){
            console.log(number);
        }
        // 打印所有元素具体的值
        for (let number of arr){
            console.log(number);
        }
  • 遍历map和set
        var map = new Map([['mashiro',100],['nagisa',90],['makoto',80]]);
        for (let x of map){
            console.log(x);
        }


        var set = new Set([3,1,4,1,2]);
        for (let x of set){
            console.log(x);
        }

3.函数

3.1.定义函数

  • 定义函数的两种方式
    // 方式一:
    function abs1(x) {
        if (x < 0){
            return -x;
        }else{
            return x;
        }
    }
    // 方式二
    var abs2 = function (x) {
        if (x < 0){
            return -x;
        }else{
            return x;
        }
    }
  • 规避错误参数
    function abs(x) {
        //手动抛出异常 规避错误参数
        if (typeof x !== "number"){
            throw 'Not a Number';
        }

        if (x < 0){
            return -x;
        }else{
            return x;
        }
    }
  • arguments 【传入的所有参数是一个数组】
  function a(a,b) {
        for (let x of arguments){
            console.log(x);
        }
    }
  • rest [ES6新特性(获取未被定义的多余参数)]
    function b(a,b,...rest) {
        console.log(a);
        console.log(b);
        console.log(rest);
    }

3.2. 变量的作用域

  • 函数内部变量的作用域只在函数中,要在函数外使用该变量需要使用闭包
    function test() {
        var x = 1;
        x = x + 1;
    }
    x = x + 2;// ReferenceError: x is not defined
  • 不用函数的变量互不相干【隔离】
    'use strict'
    function test01() {
        var x = 1;
        x = x + 1;
    }
    function test02(){
        var x = 5;
    }
  • 内部函数可以使用外部函数的变量,而外部函数不能使用内部函数的变量
    'use strict'
    function test01() {
        var x = 1;
        // ReferenceError: y is not defined
        function test02(){
            var y = x + 5;
        }
        z = y + 1; // error
    }
  • 假设内外函数变量 重名
    'use strict'
// 变量从自身函数开始查找
    function test01() {
        var x = 1;
        function test02(){
            var x = 5;
            console.log(x);
        }
        console.log(x);
        test02();
    }
    test01();
    // 1
    // 5   
  • 养成规范: JavaScript方法内部的所有变量的定义,放在函数头部。

  • 全局变量

    var i = 1;
    
    function test03() {
        console.log(i);
    }
    test03();
    
    console.log(i);
  • 全局对象 window [默认所有全局变量都会自动绑定在window类下]
    var x = 'xxx';
    alert(x);
    alert(window.x);
  • 规范 【所有全局变量都会绑定到window对象上,会产生冲突】
    // 唯一全局变量
    var mashiroAPP = {};

    // 定义全局变量
    mashiroAPP.name = 'mashiro';

    mashiroAPP.add = function (a,b) {
        return a+b;
    }

[ 将自己的代码放在自己定义的的唯一全局空间里面,降低变量命名产生的冲突 ]

  • 局部变量(let)
    function test() {
        for (var i = 0;i < 100;i++){

        }
        console.log(i+1); 
        // 101;
    }
    // ES6引入 let关键字
    function test02() {
        for (let i = 0;i < 100;i++){

        }
        console.log(i+1); 
        // ReferenceError: i is not defined;
    }
  • 常量 const
    (ES6之前常量使用大写字母定义, 在ES6之后引入了const关键字定义常量)
   function test() {
        const PI = '3.14'; // 3.14
        console.log(PI);
        PI = '456';
        console.log(PI);  // TypeError: Assignment to constant variable.
    }
    test();
  • 方法
    var mashiro = {
        name: 'mashiro',
        birth: 1998,
        // 方法
        age: function(){
           var now = new Date().getFullYear();
           return now - this.birth;
        }
    }
  • Apply
    function getAge(){
        var now = new Date().getFullYear();
        return now - this.birth;
    }

    var mashiro = {
        name: 'mashiro',
        birth: 1998,
        age: getAge
    }
    getAge.apply(mashiro,[])

4.常用类

4.1.Date对象

    var date = new Date();
    date.getFullYear(); // 年
    date.getMonth();// 月 0~11月
    date.getDate();// 日
    date.getDay();// 星期
    date.getHours();// 时
    date.getMinutes();// 分
    date.getSeconds(); // 秒    
    date.getTime();// 时间戳 1970-1-1 0:00:00 到现在的毫秒数
    
    date.toLocaleString(); // "2020/9/13 上午10:49:56"
    date.toUTCString();
    date.toGMTString(); // "Sun, 13 Sep 2020 02:49:56 GMT"

4.2.JSON对象

   'use strict'
       var user = {
           name: 'mashiro',
           age: 3,
           sex:'男'
       }
       // 对象转换为JSON字符串
       var jsonString = JSON.stringify(user);
       // 结果: "{"name":"mashiro","age":3,"sex":"男"}"


       // JSON字符串转换为对象
       var obj = JSON.parse('{"name":"mashiro","age":3,"sex":"男"}');
       // 结果: {name: "mashiro", age: 3, sex: "男"}
       //         age: 3
       //         name: "mashiro"
       //         sex: "男"

4.3.Ajax

5.面向对象编程

5.1.面向对象

  • 类: 模板
  • 对象: 实例

5.2.JavaScript中的原型

    var user = {
        name: "user",
        age: 18,
        run: function () {
            console.log(this.name + " running...")
        }
    };

    var mashiro = {
        name: "mashiro",
        age: 22
    }
    // 原型对象
    mashiro.__proto__ = user;
    // mashiro.run() --> mashiro running...

5.3.Class继承 【ES6引入新特性】

  • 定义一个类
    class Student{
        constructor(name) {
            this.name = name;
        }
        hello(){
            alert(this.name + " hello");
        }
    }

    var mashiro = new Student("mashiro");
    // mashiro.hello()
  • 继承
    class Student{
        constructor(name) {
            this.name = name;
        }
        hello(){
            alert(this.name + " hello");
        }
    }

    class js extends Student{
        constructor(name,grade) {
            super(name);
            this.grade = grade;
        }
        myGrade(){
            alert("Grade = "+ this.grade);
        }
    }
    var ahaha = new js("ahaha",100);
    ahaha.myGrade();

6.操作BOM对象 ( * )

浏览器介绍:

  • JavaScript和浏览器的关系?
    JavaScript诞生就是为了能够让他在浏览器中运行
    BOM : 浏览器对象模型
  • IE 6-11
  • Chrome
  • Safari
  • FireFox
  • Opera

6.1.window类

  • window 代表浏览器的窗口
window.innerHeight
//  969
window.innerWidth
//  1199
window.outerHeight
//  1040
window.outerWidth
//  1920

6.2.Navigator

  • 封装了浏览器的信息
//  获取当前程序的名字
navigator.appName
//  "Netscape"
//  获取程序版本信息
navigator.appVersion
//  "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36"
//  获取当前用户信息
navigator.userAgent
//  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36"
//  当前系统版本
navigator.platform
//   "Win32"       

6.3.screen

  • 屏幕
screen.width
//  1920
screen.height
//  1080

6.4.location

  • 代表当前页面的URL
location
//  主机
host: "localhost:63342"
//  指向的地址
href: "http://localhost:63342/JavaScriptStudy/lesson04/02.BOM%E5%AF%B9%E8%B1%A1.html?_ijt=m24jssb7pm61vkfuqjab05l3qe"
//  端口号
port: "63342"    
//  协议   
protocol: "http:"   
//  刷新页面
reload: ƒ reload()  
//  设置新的跳转网页
location.assign("https://www.baidu.com");

6.5.document

  • 文档: 当前页面(HTML,DOM文档树)
  • 获取网页文档树
    <dl id="app">
        <dt>Java</dt>
        <dd>JavaSE</dd>
        <dd>JavaEE</dd>
    </dl>
    <script>
        var dl = document.getElementById("app");
    </script>
    dl
    /*
    <dl id=​"app">​
        <dt>​Java​</dt>​
        <dd>​JavaSE​</dd>​
        <dd>​JavaEE​</dd>​
    </dl>​
    */
  • 获取网页cookie
    document.cookie
  • 服务器端可以设置cookie: httpOnly 来防止cookie被劫持

6.6.hostory

  • 代表浏览器的历史记录
//  后退
history.back();     
//  前进
history.forward();

7. 操作DOM

  • DOM: 文档对象模型

  • 浏览器网页就是一个DOM树形结构

  • 添加: 增加DOM节点

  • 删除: 删除DOM节点

  • 更新: 更新DOM节点

  • 遍历: 获取一个DOM节点

7.1.得到DOM节点

    <script>
        var h1 = document.getElementsByTagName("h1");
        var p1 = document.getElementsByClassName("p1");
        var p2 = document.getElementById("p2");
        var father = document.getElementById("father");

        var children = father.children;
        father.firstChild;
        father.lastChild;
        father.firstElementChild;
        father.lastElementChild;
    </script>

7.2.更新DOM节点

  • 1.获取节点
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>BOM对象</title>
</head>
<body>
    <div id="div1">

        
    <script>
        var div1 = document.getElementById("div1");
    </script>
</body>
</html>
  • 2.操作文本
    div1.innerText = "123456";
    div1.innerHTML = "<strong>123456</strong>"
  • 3.操作CSS
    div1.style.color = 'red';
    div1.style.fontSize = "40px";
    div1.style.padding = '20px';

7.3.删除DOM节点

<div id="parent">
    <h1>h1</h1>
    <p1 id="p1">p1</p1>
    <p2 class="p2">p2</p2>
</div>
    1. 寻找父节点,通过父节点删除子节点
    var self = document.getElementById("p1");
    var parent = self.parentElement;
    parent.removeChild(self);
    1. 获取父节点,删除子节点
    var parent = document.getElementById('parent');
    //  删除节点 动态更新
    parent.removeChild(parent.children[0]);
    parent.removeChild(parent.children[0]);
    parent.removeChild(parent.children[0]);
    1. remove()
    var self = document.getElementById('p1');
    self.remove();

7.4.增加DOM节点

    1. 追加一个已存在节点
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>BOM对象</title>
</head>
<body>
<p id="js">JavaScript</p>
<div id="list">
    <p id="se">JavaSE</p>
    <p id="ee">JavaEE</p>
    <p id="me">JavaME</p>
</div>

<script>
    var js = document.getElementById('js');
    var list = document.getElementById('list');
    list.appendChild(js); 
</script>
</body>
</html>
  • 2.创建新节点并追加
    var newP = document.createElement('p');
    newP.id = 'newP';
    newP.innerText = 'newP';
    list.appendChild(newP);
  • 3.创建新的标签节点
    var myScript = document.createElement('script');
    // <script type="text/javascript" src="">
    myScript.setAttribute('type','text/javascript');
    list.appendChild(myScript);
    // 通过 setAttribute方法可以设置任意的值
  • 4.在元素前插入节点
    var js = document.getElementById('js');
    var list = document.getElementById('list');
    var ee = document.getElementById('ee');
    list.insertBefore(js,ee);
  • 5.操作body
    var body = document.getElementsByTagName('body');
    body[0].style.backgroundColor = 'red';

7.5.操作表单

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>BOM对象</title>

</head>
<body>
    <form action="post">
        <span>用户名:</span><input type="text" id="username">

        <span>性别:</span>
        <input type="radio" name="sex" value="" id="boy"><input type="radio" name="sex" value="" id="girl"></form>

    <script>
        var username = document.getElementById('username');
        // 获取输入的值
        // username.value;
        // 修改表单的值
        // username.value = 'xxx';
        var boy = document.getElementById('boy');
        var girl = document.getElementById('girl');
        // boy.checked
        // true
        // girl.checked
        // false
    </script>
</body>
</html>

7.6.提交表单

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>BOM对象</title>
    <script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>
</head>
<body>
    <!--    表单绑定提交事件 onsubmit 提交时触发函数-->
    <!--    return: 如果return为false则提交失败,反之成功-->
    <form action="post" onsubmit="return mit()">
        <p>
            <span>用户名:</span><input type="text" id="username" name="username">
        </p>
        <p>
             <span>密码:</span><input type="password" id="input-password">
        </p>
        <input type="hidden" id="md5-password" name="password">

        <button type="submit">提交</button>
<!--        给按钮绑定事件,onclick 点击触发mit() 函数-->
<!--        <button type="button" οnclick="mit()">提交</button>-->
    </form>

    <script>
        function mit() {
            var uname = document.getElementById('username');
            var pwd = document.getElementById('input-password');
            var md5password = document.getElementById("md5-password");
            md5password.value = md5(pwd.value);

            console.log(md5password.value);
            return false;
        }

    </script>
</body>
</html>

8.jQuary

https://jquery.cuishifeng.cn/
jQuary文档

8.1.入门

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/core.js"></script>-->
    <script src="lib/jquery-3.0.0.min.js"></script>
</head>
<body>

<!--
jQuary公式: $(selector).action()
-->
<a href="" id="test-jQuary">点击</a>

<script>
    $('#test-jQuary').click(function () {
        alert('Hello world,jQuary');
    })
// tips: function()写在click()的括号中    
</script>

</body>
</html>

8.2.选择器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/core.js"></script>-->
    <script src="lib/jquery-3.0.0.min.js"></script>
</head>
<body>

<!--
jQuary公式: $(selector).action()
-->
<script>
// 原生js选择器
    // 标签选择器
    document.getElementsByTagName();
    // id选择器
    document.getElementById();
    // 类选择器
    document.getElementsByClassName();

// jQuary选择器
    // 标签选择器
    $('p').click();
    // id选择器
    $('#id1').click();
    // 类选择器
    $('#class1').click();
    // CSS中的选择器,jQuary都能使用,详细见文档
</script>

</body>
</html>

8.3.事件 Action

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/core.js"></script>-->
    <script src="lib/jquery-3.0.0.min.js"></script>

    <style>
        #divMove{
            width: 500px;
            height: 500px;
            border: black solid 3px;
        }
    </style>
</head>
<body>

mouse : <span id="mouseMove"></span>

<div id="divMove">在此处移动鼠标</div>

<script>
    // 网页加载完毕后,相应事件
    // $(document).ready(function () {})
    // 可简写为:
    $(function () {
        $('#divMove').mousemove(function (e) {
            $('#mouseMove').text('x:'+ e.pageX+'y:'+e.pageY);
        })
    })
</script>
</body>
</html>

<!--
$('.class1').mousedown();
$('.class1').mouseenter();
$('.class1').mouseleave();
$('.class1').mousemove();
$('.class1').mouseout();
$('.class1').mouseover();
$('.class1').mouseup();
-->

8.4.操作Dom

  • 文本操作
    // 取值
    $('#test-ul li[name=python]').text();
    // 改值
    $('#test-ul li[name=python]').text('mashiro');

    $('#test-ul').html();
  • css操作
     $('#test-ul li[name=python]').css({'color','red'});
  • 属性的隐藏与显示
    // 显示
    $('#test-ul li[name=python]').show();
    // 隐藏(display:none)
    $('#test-ul li[name=python]').hide();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值