JS学习笔记

JS学习笔记

笔记地址:https://github.com/userwusir/study-notes

数据类型

变量

//全局变量
i = 1;	//通过

//严格检查
'use strict'
i = 1;	//不通过

//局部变量使用let定义
let j = 2;

比较运算符

=

== 等于(类型不一样,值一样,会判断为true)

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

注意点:

  • 这是一个JS的缺陷,坚持使用===比较
  • NaN===NaN,结果为false,NaN与所有数值不相等,包括自己
  • 只能通过isNaN(NaN)来判断这个数是否为NaN

浮点数

尽量避免使用浮点数数值运算,存在精度问题。

数组

var arr = [1,2,3,"hello",null,true];

var elem = new Array(1,2,3,"hello",null,true);

对象

var person = {
    name: "wll",
    sex: "男",
    age: 20,
    hobby: ['1', '2', '3']
};
//取值
person.name
person.hobby[0]
person['age']

字符串

  • 多行字符串:
//反引号包裹
let str = `this
	hello
	我
`;
  • 模板字符串
let name = "wll";
let age = 20;
let msg = `"person:"${ name, age }`;
console.log(msg);

for循环

forEach循环

let po = [1, 2, 3, 4, 5, 6, 7, 8];
po.forEach(function(value) {
    console.log(value);
})

for...in

for (let i in po) {
    console.log(po[i]);
}

Map和Set

Map

let map = new Map([
    ['tom', 20],
    ['jack', 21]
]);
let r = map.get('tom');
console.log(r);

Set

let set = new Set([1, 2, 3, 3, 3, 3]);	//可以去重

image-20210323205233103

iterator

//for...in是下标,for...of是值,也可以便利Map和Set
for (let i of po) { 
    console.log(i);
}
for (let i of set) {
    console.log(i);
}

image-20210323210405724 bug

函数

定义方式

//方式一
function abs(i) {
    if (i >= 0) {
        return i;
    } else {
        return -i;
    }
}
//方式二
let abs2 = function(i) {
    if (i >= 0) {
        return i;
    } else {
        return -i;
    }
}

参数问题

可以传任意个参数,也可以不传递参数,不会报错!

//手动抛出异常
function abs(i) {
    if (i !== 'number') {
        throw 'Not a number';
    }
    if (i >= 0) {
        return i;
    } else {
        return -i;
    }
}

arguments

保存传递进函数的参数

let abs2 = function(i) {
    console.log("i = ", i);
    for (let j in arguments) {
        console.log("arguments = ", arguments[j]);
    }
    if (i >= 0) {
        return i;
    } else {
        return -i;
    }
}

image-20210323214953247

rest

获取除了已经定义的参数之外传入函数的所有参数

function fun(a, b, ...rest) {
    console.log(a);
    console.log(b);
    console.log(rest);
}

image-20210323215755173

默认所有的全局变量都自动绑定在window对象下

let x = 1;
window.alert(window.x);

let po = window.alert();
window.alert = function(){};

由于所有的全局变量都会绑定到window上,如果不同的js文件,使用了相同的全局变量,如何减少冲突?

//唯一全局变量
let wll = {};
//定义全局变量
wll.name = 'wulele';
wll.add = function(a, b) {
    return a + b;
}

把自己的代码全部放入自己定义的唯一空间的名字中,降低全局命名冲突的问题。

方法

let wusir = {
    name: 'wll',
    birth: 2000,
    //方法
    age: function() {
        //获取当前年份
        let now = new Date().getFullYear();
        return now - this.birth;
    }
}
apply
function getAge() {
    var y = new Date().getFullYear();
    return y - this.birth;
}

var xiaoming = {
    name: '小明',
    birth: 1990,
    age: getAge
};

xiaoming.age(); // 25
getAge.apply(xiaoming, []); // 25, this指向xiaoming, 参数为空

内部对象

Date

let time = new Date();
time.getFullYear(); //年
time.getMonth(); //月  0~11代表月
time.getDate(); //日
time.getDay(); //星期几
time.getHours(); //时
time.getMinutes(); //分
time.getSeconds(); //秒
time.getTime(); //时间戳	1970-1-1~现在的毫秒数
console.log(new Date(time.getTime()));  //时间戳转时间

let now = new Date();
>undefined
now.toGMTString();
>"Wed, 24 Mar 2021 13:49:33 GMT"
now.toLocaleDateString()
>"2021/3/24"
now.toLocaleString()
>"2021/3/24下午9:49:33"	//前端展示

JSON

一种轻量级的数据交换格式。

JS中,任何JS支持的类型都可以用JSON来表示

格式:

  • 对象都用{}
  • 数组都用[]
  • 所有的键值对都是用key:value
let user = {
        name: "jack",
        age: 20,
        sex: '男'
    }
    //对象转化为JSON字符串
let jsonUser = JSON.stringify(user);
//JSON字符串转对象
// let person = JSON.parse(jsonUser);
let person = JSON.parse('{"name":"jack","age":20,"sex":"男"}');

image-20210324220646153

面向对象编程

原型

let people = {
    name: "tom",
    age: 21,
    run: function() {
        console.log(this.name + "run...");
    }
};
let jack = {
    name: "jack"
};
//jack 的原型是 people
jack.__proto__ = people;

//ES6之前
function Student(name) {
    this.name = name;
}
//给Student新增一个方法
Student.prototype.hello = function() {
    alert('Hello')
};

image-20210324222809533

class继承

//ES6之后
class Student {
    constructor(name) {
        this.name = name;
    }
    hello() {
        alert(this.name);
    }
}
let student = new Student("tom");

继承

class Primary extends Student {
    constructor(name, grade) {
        super(name);
        this.grade = grade;
    }
}

操作BOM对象

image-20210325103855444

location

location.reload()	//刷新网页
location.assign("http://192.144.231.70:8080/")	//跳转

document

DOM文档树

<ul id="po">
    <li>java</li>
    <li>c</li>
    <li>c++</li>
</ul>

image-20210325123301588

history

浏览器历史记录

history.back() //后退

history.forward() //前进

操作DOM对象

获取DOM结点

<div id="po">
    <h1>Gay</h1>
    <ul>
        <li class="pp">java</li>
        <li>c</li>
        <li>c++</li>
    </ul>
</div>
let h1 = document.getElementsByTagName("h1");
let li = document.getElementsByClassName("pp");
let div = document.getElementById("po");
// 获取父节点下的所有子节点
let children = div.children;
let children1 = div.children[0];

image-20210325190011514

更新DOM结点

<div id="po">
	    
</div>
<script>
	let po = document.getElementById('po');    
</script>

po.innerText = '123' //修改文本的值

po.innerHTML = <strong>123</strong> //解析HTML文本标签

po.style.color = 'red' //修改css样式

删除DOM结点

步骤:先获取父节点,再通过父节点删除

let father = p1.parentElement //获取父节点

father.removeChild(p1) //删除子节点

创建和插入DOM结点

追加
<div id="po">
    <h1 id="gay">Gay</h1>
    <ul id="list">
        <li id="java">java</li>
        <li id="c">c</li>
        <li id="c++">c++</li>
    </ul>
</div>
let gay = document.getElementById("gay");
let list = document.getElementById("list");
list.append(gay); //追加到后面
创建
let gay = document.getElementById("gay");
let list = document.getElementById("list");
list.append(gay); //追加到后面

let newP = document.createElement('p');
newP.id = 'newP';
newP.innerText = "Hello";
list.append(newP);
let myScript = document.createElement('script');
myScript.setAttribute('type', 'text/javascript');
list.append(myScript);
let c = document.getElementById('c');
list.insertBefore(gay, c); //追加到list里面的c前面

image-20210325213657878

操作表单

    <form action="get">
        <span>用户名:</span><input type="text" id="username">
        <p>爱好</p>
        <input type="checkbox" name="hobbies" id="gay" value="gay">gay
        <input type="checkbox" name="hobbies" id="computer" value="computer">computer
        <input type="checkbox" name="hobbies" id="game" value="game">game
    </form>

    <script>
        let username = document.getElementById('username');
        let gay = document.getElementById('gay');
        username.value = '456'; //修改输入框的值
               //对于单选框radio、多选框checkbox等固定的值,value只能取得当前的值:true(选中)false(未选中)
        gay.checked = 'true'; //选中
    </script>

表单提交、加密

    <!-- onsubmit绑定一个函数,函数将结果返回给表单,使用onsubmit接受 -->
    <form action="#" method="POST" onsubmit="return check()">
        <p>
            <span>用户名:</span><input type="text" id="username" name="username">
        </p>
        <p>
            <span>密码:</span><input type="password" id="false-password">
        </p>
        <input type="hidden" name="password" id="password">
        <button type="submit">登录</button>
    </form>

    <script>
        function check() {
            let username = document.getElementById('username');
            let falsePassword = document.getElementById('false-password');
            let password = document.getElementById('password');
            //密码加密
            password.value = md5(falsePassword.value);
            //校验表单,true表单提交,false表单不提交
            return true;
        }
    </script>

jQuery

格式

<a href="" id="test">点我</a>
// $(selector).action()
        $('#test').click(function() {
            alert('Hello');
        })

选择器

https://jquery.cuishifeng.cn/index.html

鼠标响应事件

<style>
        #div {
            width: 500px;
            height: 500px;
            border: 2px solid rebeccapurple;
        }
</style>
<p id="po"></p>
<div id="div"></div>
<script>
        // 当网页元素加载完后响应事件。也可写为:$(document).ready(function(){});
        $(function() {
            $('#div').mousemove(function(e) {
                $('#po').text('x=' + e.pageX + 'y=' + e.pageY);
            });
        });
    </script>

操作DOM

$('#ul li[name=python]').text();	//获得值
$('#ul li[name=python]').text('123123');	//设置值
$('#ul').html();	//获得值
$('#ul').html('<strong>123</strong>');	//设置值

$('#ul li[name=python]').css({"color","red"});	//操作css
$('#ul li[name=python]').show();	//显示
$('#ul li[name=python]').hide();	//隐藏	display:none
posted @ 2021-04-17 00:01  芜湖男酮  阅读(85)  评论(0)    收藏  举报