JavaScript基础语法

目录

一、JS引入方式

二、JS基础语法

1. 注释

2. 输出方式

3. 数据类型

4. typeof 应用 

5. 运算符

6. 关键字应用

7. 字符串应用

8. 数组应用

9. 函数定义

10. 对象创建

11. class语法

12. Module语法 

三、基础函数应用

1、Math对象

2、Date 时间对象 -- 单位:毫秒 

3、DOM 对象 -- 操作HTML

4、操作CSS

四、事件处理格式

1. HTML事件处理

2. DOM0级事件处理 -- 推荐

3. DOM2级事件处理 -- 推荐

五、事件处理应用

1. 鼠标事件

2. Event事件对象

3. 键盘事件

4. 表单事件

5. 定时器

如有错误,烦请批评指正


一、JS引入方式

1. 嵌入到HTML中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <script>
        /*****************/
        /*javascript 代码*/
        /*****************/
    </script>
</body>
</html>

 2. 引入本地独立js文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <!--**********************************************************-->
    <script type="text/javascript" src="./xxxx.js"></script>
    <!--**********************************************************-->
</body>
</html>

 3. 引入网络来源文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <!--**********************************************************-->
    <script src="https://xxxxx/xx.js"></script>
    <!--**********************************************************-->
</body>
</html>

二、JS基础语法

1. 注释

-- 单行注释  //   
-- 多行注释  /*  */
-- 在HTML中 <!-- -->

2. 输出方式

-- 弹出框          alert("xxxx");
-- 页面输出       document.write("页面输出");
-- 控制台输出   console.log("控制台输出");

3. 数据类型

-- 数值          例: var age = 20;

-- 字符串      例: var name = "小明";

-- 布尔值     例: var gender = true;

-- undefined  例: var name=undefined;

-- null         例: var name=null;

-- 对象(object)   例: var user = {age:20, name="小明", gender=true}

-- Symbol    待定

-- BigInt       待定

-- null 和 undefined 都表示没有,  因历史原因存在

    -- null 一般表示对象"没有"

    -- undefined 一般表示 数值"没有"

4. typeof 应用 

    -- 获取数据类型
    例: typeof 123 -- number
    例: typeof abc -- string
    例: typeof true -- boolean
    例: typeof {}    -- object
    例: typeof null -- object
    例: typeof undefined -- undefined

5. 运算符

算数运算符:

+: 100+1
-: 100-1
*: 100*1
/: 100/1
取余%: 100%1
自增++
自减--

比较运算符: 

> 大于

>= 大于等于

< 小于

<= 小于等于

== 相等运算符
=== 严格相等运算符
!= 不相等运算符
!== 严格不相等运算符

== 与 === 的区别
    == 只比较数值本身是否相同
    === 比较数值本身和数据类型是否相同
    例: var num1 = 10;
       var num2 = "10";
       console.log(num1 == num2); //true
       console.log(num1 === num2); //false

布尔运算符:

取反 !
与  &&
或  ||
例: 
      !null  //true
      !undefined // true
      !0        //true
      !""    //true
       !NaN    //true
      !false    //true
    其余全部是false

 三元运算符:

x?y:z

6. 关键字应用

条件语句:

1.var关键字 -- 函数级作用域
2.let关键字 -- 块级作用域(花括号级作用域)
           -- let不存在变量提升
           -- let不允许重复声明

const 命令 
	-- 一旦声明,不可改变
	-- 必须声明的时候直接初始化
	-- 作用域与let相同	
	-- 不存在变量提升
	例: const PI = 3.1415;

if(){}
if(){}else{}
if(){}else if(){} else if(){} else{}

switch(){
    case xxx: break;
    case xxx: break;
    default: break;
    }

while(条件){}

for(let xxx of xxx){
    xxxxxxxxx
}

7. 字符串应用

charAt() -- 查找单个字符
str.length -- 字符长度

concat() -- 连接字符串

substring() -- 截取字符串

substr() -- 截取字符串

indexOf() -- 第一次字符串出现的位置,若没有则返回-1

trim() -- 去除字符串两端的空格(包括\t \w \n)
trimStart() -- 去除开头的空格
trimEnd() -- 去除结尾的空格

split() -- 字符串分割

includes()  -- 返回布尔值,表示是否找到了参数字符串

    例: 'abcd'.includes('bc'); //true

startsWith() -- 返回布尔值,表示参数字符串是否在原字符串的头部
    例: 'abcd'.startsWith('ab'); //true
endsWith() -- 返回布尔值,表示参数字符串是否在原字符串的尾部
    例: 'abcd'.endsWith('cd'); //true

repeat() -- 返回一个新字符串,表示将原字符串重复n次
    例: 'x'.repeat(3); //xxx
padStart() -- 头部补全
    例: 'x'.padStart(4,'ab'); //abax
padEnd() -- 尾部补全
    例: 'x'.padEnd(4,'ab'); //xaba

trim() -- 消除头部和尾部的空格
    例: '   abc  '.trim(); //abc
trimStart() -- 消除头部空格
    例: '   abc  '.trimStart(); //'abc  ' 
trimEnd() -- 消除尾部空格
    例: '   abc  '.trimEnd(); //'   abc'

at() -- 返回指定下标的字符,支持负索引
    例: 'abcde'.at(1)  //b
          'abcde'.at(-1) //e
    !!!超出索引范围,返回undefined

模板字符串
    例:var href = "http://www.baidu.com";
    
    var a1 = "<a href='"+href+"'></a>";
    var a2 = `<a href="${href}"></a>`;

    charAt() -- 查找单个字符
    str.length -- 字符长度

var str = "abcd";
console.log(str.charAt(1)); //b
console.log(str.charAt(-1)); //"" 为空

 concat() -- 连接字符串

var str1 = "aaa";
var str2 = "bbb";
var result = str1.concat(str2);
console.log(result); //aaabbb

concat和+区别:
        -- concat 任何类型直接合并成字符串
        -- + 遇见数字做运算,遇见字符串相连接

substring() -- 截取字符串

var str ="abcdef";
var result = str.substring(1,3);
console.log(result); // bc
  //参数1:开始位置(包含);
  //参数2:结束位置(不包含);
  //若第2个参数没有,则自动到结尾

substr() -- 截取字符串

与substring作用一样
        区别: 
            第二个参数,取长度,不取位置

indexOf() -- 第一次字符串出现的位置,若没有则返回-1

var str = "abcda";
console.log(str.indexOf('a')); //0
console.log(str.indexOf('a',2)); //4
//第2个参数: 从第N个开始

trim() -- 去除字符串两端的空格(包括\t \w \n)
trimStart() -- 去除开头的空格
trimEnd() -- 去除结尾的空格

split() -- 字符串分割

"ayyabbacc".split('a'); // ['yy','bb','cc']
split(""); //返回每一个字符
split(); //返回原字符
//第2参数: 限定字符串的个数

8. 数组应用

Array.isArray(); //判断是否是数组,用来弥补typeof的不足

push("xxx"); 在数组结尾添加数据, 返回数组的长度
pop(); 删除尾部最后一个元素, 返回该元素

shift(); 删除数组第一个元素,返回该元素
unshift(); 在数组的头部添加元素,返回数组长度

join(); 添加分隔符,数组转换成字符串
      默认用,分隔
     null, undefined 会转换成空字符串
    join() 和 split() 可相互转换

concat() -- 多个数组合并

reverse() -- 数组内的元素反转

indexOf() -- 查找数组第一次出现的位置, 不存在,则返回-1

Array.from()   将类数组转为真正的数组 

常见的类数组: 
arguments
    例: function add(){
        console.log(arguments);
        console.log(Array.from(arguments));
    }
    add(10,20,30);
元素集合
    例: let h3 = document.querySelectorAll("h3");
        console.log(h3);
        console.log(Array.from(h3));
类似数组的对象
    例: var user ={
        "0":"aaa",
        "1":"bbb",
        length:2
    };
    console.log(user);
    console.log(Array.from(user));

 Array.of() -- 用于将一组值,转换为数组

例: Array.of(3,11,2,5); //[3,11,2,5]

 Set集合

Set 类似于数组,成员唯一,不可重复,去重
例: var set = new Set();
    var arr = [1,2,3,4];
    arr.forEach(x=>s.add(x));

属性: 
    size() -- 返回set的长度
    add() -- 添加
    delete() -- 删除
    has() -- 是否包含
    clear() -- 清空

9. 函数定义

注意点: 入参不需要定义数据类型
             返回值直接return,也无需定义返回类型    

格式: function xxxx(xxx,xxx){

        xxxxxxxx;

    }

箭头函数
	var add = (x)=>x;
	//等同于
	var add = function(x){return x;}
	
	var add =(x)=>{var a; return a+x;}

	!!!箭头函数中的this,作用在上一级作用域中

例程: 

function GetName(name,age){
    console.log(name); 
    console.log(age);
}
function GetName(){
    var name = "aa"; return name;
}

 Promise对象

基本用法
const promise = new Promise(function(resolve,reject){
    if("异步成功"){
        resolve(value);
    }else{
        reject(error);
    }
});
promise.then(function(value){},function(error){});

async 异步函数 

function timeout(ms){
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            console.log("定时器");
            resolve();
        },ms)
    })
}
async function asyncPrint(ms,value){
    await timeout(ms);
    console.log(value);
}
asyncPrint(100,"aaaa");

10. 对象创建

 例程:

var user={
			name:"aaa",
			age:12,
			getName:function(){
					consol.log("bbbbbb");
			}}
属性简写
var name = 'abc';
var user={
    name,
    age:20
};
console.log(user.name); //'abc'

方法简写:
例: var user={
    age:20,
    // getAge:function(){
    // 		console.log(this.age);
    // }
    getAge(){
        console.log(this.age);
    }
}

动态Key
var id="aaa";
var user={
    [id]:"web",
    age:13
};

11. class语法

-- 不存在变量提升
constructor() -- 构造方法

ES5写法:
    function Person(name,age){
        this.name = name;
        this.age = age;
    }
    Person.prototype.getName = function(){
        console.log(this.name);
    }
    
    var p = new Person("abc",20);
    p.getName();

ES6写法:
    class Person{
        constructor(name,age){
            this.name = name;
            this.age = age;
        }
        getName(){
            console.log(this.name);
        }
        static play(){
            console.log("做游戏");
        }
    }
    Person.play(); -- 静态方法可以直接调用。不可以实例化
    Person.aaa = 30;
    console.log(Person.aaa); -- 静态属性是在类外部定义,并调用
    var p = new Person("bbb",20);
    p.getName();
        
    class Student extends Person{
        constructor(name,age,schoolName){
            //添加重构方法时,必须添加super
            super(name,age);
            this.schoolName = schoolName;
        }
    }
    var s = new Student("小明",23);
    s.getName();
    console.log(s.schoolName);

12. Module语法 

//导出
export var AAA = 10;
export var BBB = "bbb";
export function getName() {
    console.log("----");
}

//导入
//as -- 重命名
import{AAA,BBB,getName as gN} from "./AAA.js"
或者
//导出全部,用点调用
import * as MyHolle from "./AAA"; 

export default -- 默认导出
                -- 一个文件只可以写一个
例: export default function get(){
    console.log("---");
}
import a from "./AAA";
a();

三、基础函数应用

1、Math对象

Math.abs() -- 返回参数的绝对值
Math.max() -- 返回最大值,若为空,则返回
Math.min() -- 返回最小值,若为空,则返回
Math.floor() -- 返回向下取整数
Math.ceil() -- 返回向上取整数
Math.random() -- 返回0~1之间的随机数 

例程: 

//获取指定区间的随机数
function GetRandomArbitrary(min,max){
			var result = Math.random() * (max-min)+min;
			result = Math.floor(result);
			return result;
		   }

2、Date 时间对象 -- 单位:毫秒 

Date.now(); -- 获取当前时间距离1970年1月1日的时间戳
new Date(); -- 获取当前时间
例: var time = new Date();
        time.getTime(); //返回实例距离1970年1月1日的毫秒数
        time.getDate(); //返回实例对应的每个月几号
        time.getDay(); //返回星期几 (星期日为0,星期一为1)
        time.getYear(); //返回距离1900的年数
        time.getFullYear(); //返回四位的年份
        time.getMonth(); //返回月份(0表示1月,11表示12月)
        time.getHours(); //返回小时(0-23)
        time.getMilliseconds(); // 返回毫秒(0-999)
        time.getMinutes(); //返回分钟(0-59)
        time.getSeconds(); //返回秒(0-59)

例程:

//获取本年度剩余天数
function leftDays(){
			var today = new Date();
			var endYear = new Date(today.getFullYear(),11,31,23,59,59,999);
			var msPerDay = 24*60*60*1000;
			return Math.round((endYear.getTime()-today.getTime())/msPerDay);
		}

3、DOM 对象 -- 操作HTML

节点类型:

Document:整个文档数的顶层节点
DocumentType:doctype标签,声明标签
Element: 网页的各种HTML标签
Attribute: 网页元素的属性
Text: 标签之间的文本
Comment: 注释
DocumentFragmen: 文档的片段

document获取元素:

getElementsByTagName(); //根据标签名获取,返回HTMLCollection集合,若没有,则返回空
            例:var divs = document.getElementsByTagName("div")[0];
               var elementAll = document.getElementsByTagName('*');//获取所有标签

getElementsByClassName() -- 根据class获取
                        
getElementsByName() -- 根据Name获取

getElementById() -- 根据Id获取

querySelector() -- 通过CSS选择器模式,返回查询到的第一个元素

querySelectorAll() -- 通过CSS选择器模式,返回多个元素

document创建元素:

createElement() -- 创建元素
createTextNode() -- 创建节点内容
createAttribute() -- 创建属性
appendChild() -- 追加元素

append() -- 追加内容

例程:

//创建P标签
var text = document.createElement("p");
//创建内容
var content = document.createTextNode("aaaaaa");
//向P标签中追加内容
text.append(content);

//创建id特性
var id = document.createAttribute("id");
//设置id值
id.value = "bbb";
//text设置特性节点
text.setAttributeNode(id);

//获取id="cc"的标签
var newDocument = document.getElementById("cc");
//追加id标签
newDocument.appendChild(text);

Element属性:

id

className

classList

    add() -- 添加一个class

    remove() -- 移除一个class

    contains() -- 检查当前元素是否包含某个class

    toggle() -- class存在,则移除; 不存在,则添加

innerHTML

innerText

    innerHTML和innerText的区别

    innerHTML可以识别标签

    innerText会把标签识别成一个字符串

Element获取元素位置:

clientHeight -- 获取元素高度包括padding部分,不包括border,margin

clientWidth  -- 获取元素宽度包括padding部分,不包括border,margin

scrollHeight -- 元素总高度,包括padding,溢出部分,不包括border,margin

scrollWidth  -- 元素总宽度,包括padding,溢出部分,不包括border,margin

scrollLeft   -- 元素的水平滚动条向右滚动的像素数量

scrollTop    -- 元素的水平滚动条向下滚动的像素数量

offsetHeight -- 元素的CSS垂直高度(单位像素),包括元素本身的高度、padding、border

offsetWidth  -- 元素的CSS水平宽度(单位像素),包括元素本身的高度、padding、border

offsetLeft   -- 定位到父级左边界的间距

offsetTop      -- 定位到父级上边界的间距

例程:

//获取视口高度(屏幕高度)
document.documentElement.clientHeight
//网页总高度
document.body.clientHeight

4、操作CSS

1、直接操作HTML中的style属性

//例程
var box = document.getElementById("box");
box.setAttribute("style","width:200px;height:200px;background:red;");

2、配置style属性 -- 推荐

//例程
var box = document.getElementById("box");
box.style.width = "300px";
box.style.height = "300px";
box.style.backgroundColor = "red";

3、操作cssText

//例程
var box = document.getElementById("box");
box.style.cssText = "width:200px;height:200px;background:red;";

四、事件处理格式

1. HTML事件处理

       缺点: HTML和JS没有分开

//例程
<button onclick="clickHandle()">按钮</button>

<script>
    function clickHandle(){console.log("点击了按钮");}
</script>

2. DOM0级事件处理 -- 推荐

    缺点: 相同事件会被覆盖
    优点: HTML和JS分开了

//例程
<button id = "btn">按钮</button>

<script>
    var btn = document.getElementById("btn");
    btn.onclick = function clickHandle(){console.log("点击了按钮");}
</script>

3. DOM2级事件处理 -- 推荐

      优点: HTML和JS分开了
                 相同事件不会被覆盖
      缺点: 写起来麻烦

//例程
<button id = "btn">按钮</button>

<script>
    var btn = document.getElementById("btn");
    btn.addEventListener("click",function clickHandle(){console.log("点击了按钮");});
</script>

五、事件处理应用

1. 鼠标事件

click: 按下鼠标时触发

dblclick: 在同一个元素上双击鼠标时触发

mousedown: 按下鼠标时触发

mouseup: 释放鼠标时触发

mousemove: 移动鼠标时触发

mouseenter: 鼠标进入一个节点时触发,进入子节点不会触发

mouseleave: 鼠标离开一个节点时触发,离开父节点不会触发

mouseover: 鼠标进入一个节点时触发,进入子节点会再次触发

mouseout: 鼠标离开一个节点时触发,离开父节点也会触发

wheel: 滚动鼠标的滚轮时触发

//例程
<button id = "btn">鼠标移动</button>

<script>
    var btn = document.getElementById("btn");
    btn.onmousemove = function clickHandle(){
        console.log("点击了按钮");}
</script>

2. Event事件对象

Event.target -- 获取当前事件的元素

Event.type   -- 返回事件的类型

Event.preventDefault() -- 阻止默认事件(即 不让其跳转页码)

Event.stopPropagation() -- 阻止事件冒泡(即 点击子节点时,父节点不触发)

//例程
<a herf="https:\\www.baidu.com" id = "btn">百度</a>

<script>
    var btn = document.getElementById("btn");
    btn.onclick = function clickHandle(e){
        e.preventDefault(); //阻止页面跳转
        console.log("---------");
        }
</script>
//例程
<a herf="https:\\www.baidu.com" id = "btn">百度</a>

<script>
    var btn = document.getElementById("btn");
    btn.onclick = function clickHandle(e){
        e.preventDefault(); //阻止页面跳转
        console.log("---------");
        }
</script>

3. 键盘事件

keydown: 键盘按下时触发

keypress: 按下有值的建时触发,按下Ctrl、Alt、Shift、Meta等这样无值的键不触发。

                    对于有值的键,按下时先触发keydown事件,再触发此事件

keyup:松开键盘时触发该事件

//例程
<input type="text" id="user">

<script>
    var user = document.getElementById("user");
    user.onkeyup = function clickHandle(e){
        console.log(e.target.value); //获取输入的值
        console.log(e.keyCode); //获取按键的唯一标识
        }
</script>

4. 表单事件

事件代理(事件委托)
        由于事件会在冒泡阶段向上传播到父节点,因此可以把子节点的监听函数定义在父节点上,由父节点的监听函数
         统一处理多个子元素的事件。这种方法叫做事件的代理
     (即 在父元素中写子元素事件) 

input事件 -- 当<input><select><textarea>的值发生变化时触发(包括复选框和单选框)

select事件 -- 当<input><textarea>里面选中文本时触发

change事件 -- 当<input><select><textarea>的值发生变化时触发。它与input事件的最大不                              同,就是不会连续触发,只有当全部修改完成时才会触发

reset事件 -- 表单重置时触发

submit事件 -- 表单提交时触发

//例程
<ul id = "list">
    <li>列表1</li>
    <li>列表2</li>
    <p>P标签</p>
</ul>

<script>
    var list = document.getElementById("list");
    list.addEventListener("click",function(event){
        if(event.target.tagName.toLowerCase() === "li")
        {
            console.log(event.target.innerHTML);
        }
    })
</script>

5. 定时器

setTimeout()

格式:

var timerId = setTimeout(fun|code,delay);
                       fun|code -- 将要推迟执行的函数名或者一段代码
                       delay -- 推迟执行的毫秒数
        注: 定时器中的this指向全局,若向指局部,需添加中间量

//例程
<script>
    setTimeout(function(){
    console.log("3秒后执行")
    }, 3000);
</script>

 clearTimeout() -- 取消定时器

//例程
clearTimeout(timerId);

setInterval() -- 间隔执行

//例程
<script>
    var timerId = setInterval(fun|code,delay);
		clearInterval(timerId); -- 清除间隔执行
</script>

 


如有错误,烦请批评指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值