不想学习的小狐狸

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

引入javascript

1、内部标签

<script>
    ...
</script>

2、外部引入

 <script>
        alert('helloworld');
    </script>
    <!--外部引用-->
    <script src="js/qj.js"></script>
    <!--不用显示定义type,也默认就是javascript-->
    <script type="text/javascript"></script>

基本语法

number

js不区分整数小数

123//整数
123.1//浮点数
1.123e3//科学计数法
-99//负数
NaN//not a number
Infinity//无限大

字符串

'abc' "abc"

布尔值

true false

逻辑运算

&& 两个都为真,结果为真
|| 一个为真,结果为真
!  取反

比较运算符

=
== 等于(类型不一样,值一样,也会判断为true)坚持不要使用
=== 绝对等于(类型一样,值一样,结果true)

须知:

  • NaN===NaN,这个与所有的数值都不相等,包括自己

  • 只能通过isNaN(NaN)来判断这个数是否是NaN

浮点数问题:

console.log((1/3)===(1-2/3))

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

Math.abs(1/3-(1-2/3))<0.0000000001

null和 undefined

  • null 空
  • undefined 未定义

数组

java的数组必须要相同类型的对象,js不需要

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

取数组下标,如果越界,就会undefined

对象

对象是大括号,数组是中括号

每个属性之间使用逗号隔开,最后一个不需要添加

var person={
            name: "mmmm",
            age: 2,
            tags:['js','java','...']
        }

取对象的值

person.name

严格检查模式strict

'user strict' 严格检查模式,预防javascript的随意性导致的一些问题
且必须写在javascript的第一行
局部变量建议都是用let去定义

数据类型

字符串

正常的字符串使用单引号或双引号包裹

注意转义字符\

\'
\n
\u4e2d Unicode字符
\x41        ASCII字符

多行字符串编写

var msg = `
  hello
  world
  hhh
`

模板字符串

let name="mm";
let age = 3;
let msg=`你好呀,${name}`

字符串长度

var student="student"
console.log(student.length)

字符串的可变性,不可变

//这里是方法,不是属性
student.toUpperCase()
student.toLowerCase()

substring

student.substring(1)//从第一个字符串截取到最后一个字符串
student.substring(1,3)//[1,3)

数组

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

 

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

arr[0]

arr[0]=1

长度

arr.length

注意:加入给arr.length赋值,数组大小就会发生变化,如果赋值过小,元素就会丢失

indexOf 通过元素获得下标索引

arr.indexOf(2)

slice() 截取array中的一部分,返回一个新数组,类似String中的substring

push(),pop()

 

push:压入到尾部

pop:弹出尾部的一个元素

unshift(),shift()

shift:弹出头部的一个元素

unshift:压入到头部

排序sort()

元素反转 reverse()

拼接concat()

注意:concat()并没有修改数组,只是会返回一个新的数组

连接符join()

 

join()打印拼接数组,使用特定的字符串连接

var arr=["A","B","C"]
arr.join('-')
"A-B-C"

多维数组

arr=[[1,2],[3,4],["5","6"]]
arr[1]

对象

若干个键值对

var 对象名={
    属性名: 属性值,
    属性名: 属性值,
    属性名: 属性值
}

js中对象,{...}表示一个对象,键值对描述属性

多个属性之间使用逗号隔开,最后一个属性不加逗号

JavaScript中的所有键都是字符串,值是任意对象

1、对象赋值

person.name="mmm"

2、使用一个不存在的对象属性,不会报错!undefined

3、动态的删减属性

delete person.name

4、动态的添加,直接给新的属性添加值

person.age=23

5、判断属性值是否在这个对象中

'age' in person
true
//继承
'toString' in person
true

6、判断一个属性是否是这个对象自身拥有的

person.hasOwnProperty('toString')
false
person.hasOwnProperty('age')
true

流程控制

if判断

循环while

for循环

forEach循环

var age=[12,5,2,546,1215,1245,45];
age.forEach(function (value) {
    console.log(value)
})

for...in循环

for(var num in age){
            if(num.hasOwnProperty(num)){
                console.log("存在")
                console.log(num)
            }
        }

Map和Set

Map:

var map = new Map([['tom',100],['jack',90],['mm',80]]);
        var name = map.get('tom');//通过key获得value
        map.delete('tom')
        map.set('admin',123456);
        console.log(name);

Set:无序不重复的集合

var set = new Set([3,1,1,1]);//set可以去重
        set.add(2);
        set.delete(1)
        console.log(set.has(3))

iterator

遍历数组

//通过for of / for in是下标
var arr=[3,4,5]
for(var x of arr){
    console.log(x)
}

遍历map

var map = new Map([['tom',100],['jack',90],['mm',80]]);
for(let x of map){
    console.log(x)
}

遍历Set

var set = new Set([5,6,7]);
for(let x of  set){
    console.log(x)
}

函数

定义函数

定义方式一:

function abs(x){
    if(x>=0){
        return x;
    }else{
        return -x;
    }
}

一旦执行到return代表函数结束,返回结果

如果没有执行return,函数执行完也会返回结果,结果就是undefined

定义方式二:

var abs = function(x){
if(x>=0){
        return x;
    }else{
        return -x;
    }
}

function(x){...} 这是一个匿名函数,但是可以把结果赋值给abs,通过abs调用函数

调用函数

abs(10)//10
abs(-10)//10

参数问题:javascript可以传任意个参数,也可以不传递参数

假设不存在参数,如何规避?

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

变量的作用域

在javascript中,var定义变量实际是有作用域的

假设在函数体中声明,则在函数体外不可以使用

如果两个函数使用了相同的变量名,只要在函数内部,就不冲突

内部函数可以访问外部i函数的成员,反之则不行

假设在javascript中函数查找变量从自身函数开始,由内向外查找。

假设外部存在这个同名的函数变量,则内部函数会屏蔽外部

所有的变量定义都放在函数的头部,便于代码维护

javascript实际上只有一个全局作用域,任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到,报错referenceerror

规范

由于我们所有的全局变量都会绑定到window上。如果不同的js文件,使用了相同的全局变量,就会发生冲突

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

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

局部作用域let

let关键字,解决局部作用域冲突问题

建议使用let去定义局部作用域的变量

常量const

 

在ES6引入了常量关键字

const PI='3.14';//只读变量
console.log(PI);

方法

定义方法

方法就是把函数放在对象里面,对象只有两个东西,属性和方法

 var orange = {
           name:'mmm',
           birth:2000,
           //方法
           age:function () {
               var now = new Date().getFullYear();
               return now-this.birth;
           }
       }
 //属性
 orange.name
//方法,一定要带括号
orange.age()

apply

在js中可以控制this指向

function getAge() {
            var now = new Date().getFullYear();
            return now-this.birth;
        }
       var orange = {
           name:'mmm',
           birth:2000,
           //方法
           age:getAge()
       };
        getAge.apply(orange,[]);//this指向了orange,参数为空

内部对象

Date

基本使用

var now=new Date();
        now.getFullYear();//
        now.getMonth();//月0-11代表月
        now.getDate();//星期几
        now.getHours();//
        now.getMinutes();//
        now.getSeconds();//
        now.getTime();//时间戳 全时间统一1970.1.1 0.00.00开始经过的秒
        console.log(new Date(1622622448586))//时间戳转为时间

转换

now = new Date(1622622448586)
Wed Jun 02 2021 16:27:28 GMT+0800 (中国标准时间)
now.toLocaleString//注意调用的是一个方法,不是一个属性
ƒ toLocaleString() { [native code] }
now.toLocaleString()
"2021/6/2下午4:27:28"
now.toGMTString()
"Wed, 02 Jun 2021 08:27:28 GMT"

JSON

在javascript一切皆为对象,任何js支持的类型都可以用json表示

格式:

  • 对象都用{}

  • 数组都用[]

  • 所有的键值对,都用key:value

JSON字符串和JS对象的转化

var user ={
            name: "orange",
            age:3,
            sex:'女'
        }
        //对象转换为json字符串 {"name":"orange","age":3,"sex":"女"}
    var jsonUser = JSON.stringify(user);
        //json字符串转化为对象,参数为json字符串
        //{name: "orange", age: 3, sex: "女"}
    var obj=JSON.parse('{"name":"orange","age":3,"sex":"女"}');

面向对象原型继承

var Student = {
           name: "orange",
           age: 3,
           run:function () {
               console.log(this.name+"run....");
           }
       };
       var xiaoming = {
           name:"xiaoming"
       };
       xiaoming._proto_ = user;

面向对象class继承

class关键字,是在ES6引入的

class Student{
            constructor(name){
                this.name =name;
            }
            hello(){
                alert('hello')
            }
        }
        var xiaoming = new Student("xiaoming");
        var xiaohong = new Student("xiaohong");
        xiaoming.hello()

继承

class XiaoStudent extends Student{
            constructor(name,grade){
                super(name);
                this.grade = grade;
            }
            myGrade(){
                alert("我是一名小学生")
            }
        }

操作BOM对象

BOM:浏览器对象模型

window

window代表 浏览器窗口

window.alert(1)
window.innerHeight
936
window.outerHeight
1040
window.innerWidth
1044
window.outerWidth
1920

Navigator

navigator封装了浏览器的信息

window.Navigator.name
"Navigator"
navigator.appName
"Netscape"
navigator.appVersion
"5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
navigator.userAgent
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
navigator.platform
"Win32"

大多数时候不会使用navigator,因为会被人为修改

不建议使用这些属性来判断和编写代码

screen

 

代表屏幕尺寸

screen.width
1920
screen.height
1080

location

代表当前页面的URL信息

host: "www.baidu.com"
href: "https://www.baidu.com/"
protocol: "https:"
reload: ƒ reload()//刷新网页
//设置新的地址
location.assign('vvvvv.com')

document

document.title
"百度一下,你就知道"
document.title='mmm'
"mmm"
//获取具体的文档树结点节点
<dl id="app">
        <dt>java</dt>
        <dd>javaee</dd>
        <dd>javaee</dd>
    </dl>
    <script>
      var dl=  document.getElementById('app');
    </script>

获取cookie

document.cookie

history(不建议使用)

代表浏览器的历史纪录

history.back()//后退
history.forward()//前进

操作DOM

DOM:文档对象模型

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

  • 更新:更新DOM节点

  • 遍历DOM节点:得到DOM节点

  • 删除:删除一个DOM节点

  • 添加:添加一个新的节点

要操作一个DOM节点,就必须要先获得一个DOM节点

获取DOM节点

 var h1=document.getElementsByTagName('h1');
    var p1=document.getElementById('p1');
    var p2 = document.getElementsByClassName('p2');
    var father = document.getElementById('father');

    var children = father.children;
    // father.firstChild
    // father.lastChild

这是原生代码,之后尽量使用jQuery

更新节点

<div id="id1">

</div>

<script>
    var id1 = document.getElementById('id1');
//操作文本
id1.innerText='123'//修改文本的值
"123"
id1.innerHTML='<strong>123</strong>'//解析HTML文本标签
"<strong>123</strong>"
//操作JS
id1.style.color='red'//属性使用,字符串‘’包裹
"red"
id1.style.fontSize='12px'
"12px"
id1.style.padding='2em'
"2em"

 

删除节点

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

<div id="father">
    <h1>标题一</h1>
    <p id="p1">p1</p>
    <p class="p2">p2</p>
</div>
<script>
    var self=document.getElementById('p1');
    var father = p1.parentElement;
    father.removeChild(p1)
</script>

注意:删除多个节点的时候,children是在时刻变化的

插入节点

获得了某个DOM节点,假设这个DOM节点是空的,则通过innerHTML就可以增加一个元素,但是这个DOM节点如果已经存在元素了,就不可以这样做,会产生覆盖

<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>

创建一个新的标签实现插入

<script> 
var list=document.getElementById('list');
 var newP=document.createElement('p');//创建一个p标签
    newP.id='newP';
    newP.innerText='hello'
    list.appendChild(newP);

操作表单

<script>
    var input_text = document.getElementById('username');
    var boy_radio = document.getElementById('boy');
    var girl_radio = document.getElementById('girl');
    //得到输入框的值
    input_text.value
    //修改输入框的值
    input_text.value='123'

    //对于单选框,多选框等固定的值, boy_radio.value只能取到当前的值
    boy_radio.checked;//查看返回的结果,是否为true,如果为true,则被选中
    girl_radio.checked=true;//赋值
    

</script>

提交表单

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--MD5工具类-->
    <script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>
</head>
<body>
<form action="post">
    <p>
        <span>用户名:</span><input type="text" id="username">
    </p>
    <p>
        <span>密码:</span><input type="password" id="input-password">
    </p>
    <input type="hidden" id="md5-password" name="password">
    <!--绑定时间onclick被点击-->
   <button type="button" onclick="mm">提交</button>
</form>
<script>
    function mm() {
        var uname= document.getElementById('username');
        var pwd=document.getElementById('input-password');
        var md5pwd = document.getElementById('md5-password');
        //MD5算法
        // pwd.value = md5(pwd.value);
       md5pwd.value=md5(pwd.value);
       //可以验证判断表单内容,true就是通过提交,false阻止提交
        return true;
    }
</script>
</body>
</html>

jQuery

jQuery库存在大量javascript函数

引入jQuery及其公式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--cdn引入-->
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
</head>
<body>
<a href="" id="test-jquery">点我</a>
<!--
公式:$(selector).action
-->
<script>
    //选择器就是css的选择器
$('#test-jquery').click(function () {
    alert('hello')
})
</script>
</body>
</html>

jQuery选择器

api文档查看https://jquery.cuishifeng.cn/index.html

 $('p').click();//标签选择器
 $('#id1').click()//id选择器
 $('.class1').click()//class选择器

 

 

 

 

posted on 2021-06-03 19:00  一只小狐狸kis  阅读(53)  评论(0编辑  收藏  举报