Bootstrap

长篇总结之JavaScript,巩固前端基础

| 求星星 ✨ | 给个❤️关注,❤️点赞,❤️鼓励一下作者



大家好,我是魔王哪吒,很高兴认识你~~



哪吒人生信条:如果你所学的东西 处于喜欢 才会有强大的动力支撑



每天学习编程,让你离梦想更新一步,感谢不负每一份热爱编程的程序员,不论知识点多么奇葩,和我一起,让那一颗四处流荡的心定下来,一直走下去,加油,加油!欢迎关注加我,欢迎点赞、收藏和评论



不要害怕做梦,但是呢,也不要光做梦,要做一个实干家,而不是空谈家,求真力行。

大家好,我是魔王哪吒,话不多说,今天带来的是一篇《长篇总结之JavaScript,巩固前端基础》文章,欢迎大家喜欢。

前言

什么是JavaScript

JavaScript是一种基于对象和事件驱动的客户端脚本语言,最初是为了检验HTML表单输入的正确性,起源于Netscape公司的LiveScript语言。

了解JavaScript的发展历史

关系是:是的一个曾用名,: 定义了的语法规范,描述了语言的基本语法和数据类型。

了解JavaScript的组成

是由语言,组成。

学习js的注解和分号

单行注解

多行注解

语句结束使用分号,如果省略,则由接下确定语句的结尾。

学习JavaScript的语法

ECMAScript中的一切是区分大小写的,如变量,函数名,操作符。

学习标识符

什么是标识符,变量,函数,属性的名称,或者是函数的参数。

标识符的命名规则

学习什么是变量

什么是变量,ECMAScript的变量是松散类型的。松散类型是指可以用来保存任何类型的数据。

每个变量仅仅只是用于保存值的占位符而已。

学习变量的声明和赋值

变量的声明:变量的声明使用var操作符,语法:var变量名。

变量的赋值:

一次声明多个变量,用逗号隔开。

注意,省略var声明的变量是全局变量,不推荐省略var操作符来定义全局变量。

掌握JavaScript的数据类型

ECMAScript中分:简单数据类型和复杂数据类型。

简单数据类型也称为基本数据类型,注意,在ES6中新增了symbol数据类型。

基本数据类型5种:

复杂数据类型分:

学习typeof操作符

typeof是用来检测变量的类型。

语法结构,或者是

返回值,是string类型,或者是等。

学习Undefined

类型只有一个值,即是特殊的。

说明:一般而言,不存在需要显式地把一个变量设置为值的情况。

学习null

值表示一个空对象指针;如果定义的变量准备在将来用于保存对象,那么最好将变量初始化为null而不是其他值。

值是派生自值的,所以的返回结果为。

学习`number`知识点

:表示整数和浮点数。

是()是一个特殊的数值,表示非数字。

任何涉及的操作,都会返回。

与任何值都不相等,包括本身。

学习`isNaN`知识点

表示检测是否为“非数值”。返回结果为。

说明:对接收的数值,先尝试转换为数值,再检测是否为非数值。

数值转换

可以用于任何数据类型,和用于把字符串转成数值。

是会忽略字符串前面的空格,直至找到第一个非空格字符。

转换空字符串返回。

这个函数提供第二个参数,转换时使用的基数。

从第一个字符开始解析每个字符,直至遇见一个无效的浮点数字符为止。

除了第一个小数点有效外,与的第二个区别在于它始终都会忽略前导的零。

学习Striing

类型用于表示由零或多个16位字符组成的字符序列。

学习字符串转换

将转换为字符串。使用函数,能够将任何类型的值转换为字符串。

学习Boolean

用于表示真假的类型,即是表示真,表示假。

学习类型转换

除了0之外的所有数字,转换为布尔型都为true。

除了“ ”之外的所有字符,转换为布尔型都为true。

和转换为布尔型为。

算数操作符

表达式是将同类型的数据,用运算符号按一定的规则连接起来的,有意义的式子。

操作符的分类

递增

与都对进行递增的操作。

区别:

先返回递增之后的的值,先返回的原值,再返回递增之后的值。

递减同理。

三元操作符

语法:条件?执行代码1:执行代码2

逻辑操作符

逻辑与`&&`

如果第一个操作数隐式类型转换后为,那么返回第一个操作数。

如果第一个操作数隐式类型转换后为,那么返回第二个操作数。

如果,只有有一个操作数为,其中一个,就会返回。

逻辑或与逻辑非

或,只要有一个条件成立,返回

非,无论操作数是什么数据类型,逻辑非都会返回一个布尔值。

流程控制语句

,弹出警告对话框

语句

if(condition){

statement1;

}else{

statement2;

}

语法:

弹出输入框,有确定和取消。

var age = prompt("请输入您的年龄")

和任何内容都不相等,包括它本身

document.wirte(),星期的获取方法,掌握switch

语法:

获取星期,返回值,

var week = new Date().getDay();

console.log(week);

多条件可以使用语句

语法:

switch(expression) {

case value: statement

break;

case value: statement

break;

...

defalut: statement

}

向浏览器输出内容:

JavaScript中的循环语句

语法:

while(条件){

执行的代码;

}

语法:

do{

需要执行的代码

}while(条件)

循环至少要被执行一次。

break语句和continue语句

立即退出循环

结束本次循环,继续开始下一次循环

JavaScript中的函数

函数的作用就是通过函数可以封装任意多条语句,可以在任何地方,任何时候调用执行。

函数是如何定义的,使用声明。

函数名属于标识符。

函数的返回值

声明一个带有参数的函数:

function add(num1,num2){

var sum = sum1+sum2;

return sum;

}

console.log(add(2,3));

函数会在执行完语句之后停止并立即退出,语句也可以不带有任何返回值,用于提前停止函数执行又不需要返回值的情况。

掌握

在中的参数在内部用一个数组来表示,在函数体内通过对象来访问这个数组参数。

内置对象

对象:字符串,函数,数组

内置对象就是浏览器自己封装好的对象。

数组是用来存储一组数据的,如何创建数组,数组元素的读和写,数组的属性。

创建数组:使用构造函数,,使用字面量表示法。

数组的栈方法

方法,语法:,功能是用于把数组中的所有元素放入一个字符串,返回的值是字符串。

方法,语法:,功能是用于颠倒数组中元素的顺序,返回值为数组。

方法,语法:,功能是用于对数组的元素进行排序,返回值为数组。-按照字符串比较的。

代码:

arr.sort(function(a,b){return b-a});

方法,是用于连接两个或者多个数组,返回值为数组。

arr3 = arr1.concat(arr2);

截取,从已有的数组中返回选定的元素。

语法:

`splice()`方法-删除-插入-替换

删除,语法:,功能:删除从处开始的零个或多个元素。返回值为含有被删除的元素的数组。

如果为0,不删除任何值,如果不设置,删除从开始的所有值。

插入,语法:,功能为在指定位置插入值。

替换:语法:,功能,在指定位置插入值,同时删除任意数量的项。

为起始位置,为要删除的项数,为要插入的项。

位置-indexOf和lastIndexOf

,语法,,功能,从数组的开头(位置为0)开始向后查找。

返回值为,没有找到的话就是返回,查找到返回在数组中的位置。

,语法:,功能是从数组的末尾开始向前查找。

字符串的方法:

与的区别

语法:,功能返回中的位置的字符。

语法:,功能返回中的位置字符的字符编码。

字符串的截取

字符串对象的截取:

数组对象也有的语法

对于字符串的截取:

语法:

功能,截取子字符串。

参数说明:

`substring()`

语法,主要区别是这个当参数为负数时,自动转换为0。

会将小的数当作开始位置,把较大的数当作结束位置。

,语法:

功能是截取字符串。

为指定字符串开始的位置,为表示截取的字符总数,省略时截取到字符串的末尾。

当为负数时,会将传入的负值与字符串的长度相加。而为负值时,返回字符串。

代码:

字符串长度为11

str.substring(6,9);

str.substr(6,3);

str.substr(-5,4); // (6,4)

str.substr(3,-4);

获取扩展名

var url="http://xxx/index.txt";

function getFileFormat(url) {

var pos = url.lastIndexOf(".");

return url.substr(pos); // .txt

}

var formatName = getFileFormat(url);

`split()`

语法:。

功能,把一个字符串分割成字符串数组。返回值为。

为分隔符。

`replace()`替换

语法:

功能:在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。返回值为。

toUpperCase()和toLowerCase()

语法:,把字符串转换为大写。

语法:,把字符串转换为小写。

str.charAt(6).toUpperCase();

将每一个单词的首字母转换为大写,连接剩余的字符

var newStr = word.charAt(0).toUpperCase()+word.substr(1);

数学对象

取整,,

语法:,功能为向上取整,即返回大于的最小整数。

,向下取整,返回的整数部分。

语法,功能是将数值四舍五入为最接近的整数。

绝对值`Math.abs()`

功能是返回的绝对值,语法:,返回值为。

`random()`方法-随机数

封装一个求n到m之间的随机整数的函数。

语法,是返回大于等于0小于1的随机数。

date对象

为创建一个日期时间对象。不传参,返回当前的日期时间对象。

常用的一些方法

代码:

var today = new Date(),

year = today.getFullYear(),

month = today.getMonth()+1,

date = today.getDate(),

week = today.getDay(), // 0-6

hours = today.getHours(),

minutes = today.getMinutes(),

seconds = today.getSeconds(),

设置方法

错误处理

语法错误:不符合js语法的错误。

运行时错误,代码没有语法错误,但是在运行时发生错误。

如何区分语法错误与运行时错误

逻辑错误

什么是逻辑错误?就是指计算结果很想象的不一样。

代码:

function foo() {

try {

throw new Error();

}catch(e){

return 1;

}finally{

return 2;

}

}

DOM节点操作

DOM操作,添加节点,删除节点,修改节点,查找节点。

创建节点

创建节点

创建方法:

代码创建节点:

myReady(function(){

var ul = document.getElementById("myList");

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

ul.appendChild(li);

});

    创建节点的高效方法:

    ,

    节点遍历

    属性可返回文档的根节点

    属性返回元素的标签名

    类数组对象

    类数组对象

    示例:

    myReady(function(){

    var scripts = document.scripts;

    var links = document.links;

    var cells = document.getElementById("tr").cells;

    var imgs = document.images;

    var forms = document.forms;

    var options = document.getElementById("select").options;

    var ps = document.getElementsByTagName("p");

    }

    类数组对象

    类数组对象的动态性

    三个集合,,都是动态的。

    节点查找

    获取元素的方式

    伪数组

    获取元素属性

    ele.setAttribute("属性名","属性值")

    ele.getAttribute("属性名")

    ele.removeAttribute("属性名")

    ele.dataset.prop="值"

    获取元素的内容

    使用于表单

    系列属性

    滚动条滚动的距离:

    window.pageYOffset(ie9以下不支持)

    document.body.scrollTop

    document.documentElement.scrollTop;

    可视窗口尺寸:

    window.innerWidth(IE8以下不兼容)

    document.documentElement.clientWidth

    document.body.clientWidth(怪异模式)

    判断怪异模型的方法

    document.compatMode

    滚动到指定位置

    scroll(x,y) scrollTo(x,y) scrollBy(x,y);

    节点查找querySelector()和querySelectorAll()

    返回指定选择器的一个元素

    返回指定选择器的一组元素

    操作节点

    为指定元素节点的最后一个子节点之后添加节点,该方法返回新的子节点。

    在指定的已有子节点之前插入新的子节点。

    该方法用于新节点替换某个子节点。返回被替换的节点。

    创建节点的拷贝,并返回该副本。

    var myUrl = document.getElementById("myUrl");

    var newNode = myUrl.cloneNode(true); // 深度,有其子节点,默认为false,只有父节点

    能够合并相邻的节点。

    代码:

    myReady(function(){

    var div = document.createElement("div");

    var textNode = document.createTextNode("dom");

    div.appendChild(textNode);

    var textNode2 = document.createTextNode("web");

    div.appendChild(textNode2);

    document.body.appendChild(div);

    console.log(div.childNodes.length);

    div.normalize();

    console.log(div.childNode);

    console.log(div.firstChild.nodeValue);

    }

    按照指定的位置把文本节点分割为两个节点。

    删除节点方法

    删除某个节点中指定的子节点。

    必须有参数

    myReady(function(){

    var myUrl = document.getElementById("myUrl");

    console.log(myUrl.childNodes.length);

    var secondChild = myUrl.removeChild(myUrl.childNode[1]);

    console.log(secondChild);

    console.log(myUrl.childNodes.length);

    }

    和比较

    方法

    var list=document.getElementById("myList");

    list.removeChild(list.childNodes[0]);

    移除前:

    Coffee

    Tea

    Milk

    移除后:

    Tea

    Milk

    浏览器支持

    所有主要浏览器都支持 方法

    语法

    创建节点,查找节点,操作节点,删除节点

    DOM属性

    示例:

    id="div0"

    class="active"

    style=""

    url=""

    xxx="">

    属性分:固有属性和自定义属性

    示例:

    myReady(function(){

    var inputs = document.querySelectorAll("input”);

    inputs[0].checked = true;

    }

    1

    2

    3

    性别:

    示例:

    性别:

    你去过的城市:

    示例:

    你去过的城市:

    你去过的城市:

    示例:

    你去过的城市:

    常见的字符串属性

    前端

    示例:

    前端

    事件

    什么是事件?是文档或浏览器窗口发生的一些交互瞬间。

    事件方法:

    HTML事件

    示例:

    绑定事件

    绑定事件的方法:

    • 以下不兼容

    • 可以为一个元素绑定多个事件

    • 指向元素本身

    • 独有

    • 可以为一个元素绑定多个事件

    • 指向

    键盘事件与keyCode属性

    在用户按下一个键盘按键时发生

    在按下键盘按键时发生

    在键盘按键被松开时发生

    返回,或事件触发的键的值的字符代码,或键的代码。

    当用户与web页面进行某些交互时,解释器就会创建响应的对象以描述事件信息。

    事件句柄,称事件处理函数,事件监听函数,指用于响应某个事件而调用的函数。

    事件的解绑

    移除事件,

    语法:,功能,移除方法添加的事件句柄。

    示例:

    var btn2 = document.getElementById("btn2");

    btn2.addEventListener('click',function(){

    alert('btn2');

    },false);

    // 事件解绑

    btn2.removeEventListener('click',function(){

    alert('btn2');

    });

    事件解绑成功的主要原因在保存addxx和removexx里面的参数相同。

    事件流(事件处理程序)

    添加事件:

    语法:

    功能是用于向指定元素添加事件句柄

    移除事件

    语法:

    功能是移除方法添加的事件句柄。

    事件委托和事件冒泡

    事件周期:事件捕获(事件对象沿树向下传播),目标触发(运行事件监听函数),事件冒泡(事件沿着树向上传播)。

    事件冒泡和事件捕获

    示例:

    // 事件冒泡

    document.getElementById('parent').addEventListener("click",function(e){

    alert("parent事件被触发"+this.id);

    })

    document.getElementById("child").addEventListener("click",ffunction(e){

    alert("child事件被触发"+this.id);

    })

    事件委托的原理就是事件冒泡

    对象属性与方法

    事件的类型,事件源,就是发生事件的元素。

    阻止默认行为

    var link = document.getElementById("mylink");

    link.onClick = function(event){

    event.preventDefault();

    }

    取消事件捕获或者冒泡

    var btn = document.getElementById("myBtn");

    btn.onclick=function(event){

    alert("Click");

    event.stopPropagation();

    }

    document.body.onclick = function(event){

    alert("Body clicked");

    }

    点击谁谁就是,事件源

    事件绑定在谁身上,就指向谁

    就是指浏览器顶部底边到鼠标的位置

    就是指浏览器顶部底边到鼠标的位置

    就是指屏幕顶部到鼠标位置

    event对象中的属性和方法

    • 事件源,就是发生事件的元素。

    • 布尔属性,设置为时,将停止事件进一步起泡到包容层次的元素。

    • 布尔属性,设置为时可以组织浏览器执行默认的事件动作。

    event对象跨浏览器兼容

    示例:

    var EventUtil = {

    addHandler: function(element, type, handler) {

    },

    getTarget: function(event){

    return event.target || event.srcElement;

    },

    preventDefault: function(event){

    if(event.preventDefault){

    event.preventDefault();

    }else{

    event.returnValue = false;

    },

    removeHandler: function(element,type,handler){

    },

    stopPropagation: function(event){

    if(event.stopPropagation){

    event.stopPropagation();

    }else{

    event.cancelBubble = true;

    }

    }

    }

    }

    Event addEventListener attacEvent

    示例:

    var EventUtil = {

    addHandler: function(element,type,handler){

    },

    removeHandler: function(element,type,handler){

    }

    }

    什么是

    浏览器对象模型。

    Window 对象

    对象表示浏览器中打开的窗口。

    如果文档包含框架,浏览器会为 文档创建一个 对象,并为每个框架创建一个额外的 对象。

    全局变量

    声明和关键字声明

    对象的方法

    语法:

    语法:

    |Window| 对象属性|

    |:---|:---|

    |属性| 描述|

    |closed| 返回窗口是否已被关闭。|

    |defaultStatus| 设置或返回窗口状态栏中的默认文本。|

    |document| 对 Document 对象的只读引用|

    |frames| 返回窗口中所有命名的框架。该集合是 Window 对象的数组,每个 Window 对象在窗口中含有一个框架。|

    |history| 对 History 对象的只读引用。|

    |innerHeight| 返回窗口的文档显示区的高度。|

    |innerWidth| 返回窗口的文档显示区的宽度。|

    |localStorage| 在浏览器中存储 key/value 对。没有过期时间。|

    |length| 设置或返回窗口中的框架数量。|

    |location| 用于窗口或框架的 Location 对象。请参阅 Location 对象。|

    |name| 设置或返回窗口的名称。|

    |navigator| 对 Navigator 对象的只读引用|

    定时器

    超时调用,间歇调用

    语法:

    语法:

    示例:

    var intervalId = setInterval(function(){

    console.log("web");

    },1000);

    setTimeout(function(){

    clearInterval(intervalId);

    },10000);

    函数可以访问由函数内部定义的变量,如:

    实例

    function myFunction() {

    var a = 1;

    return a * a;

    }

    函数也可以访问函数外部定义的变量,如:

    实例

    var a = 1;

    function myFunction() {

    return a * a;

    }

    location对象

    对象提供了与当前窗口中加载的文档有关的信息,还提供了一些导航的功能,它既是对象的属性,也是对象的属性。

    返回当前加载页面的完整的url。

    返回服务器名称和端口号。

    返回不带端口号的服务器名称。

    返回中的目录和文件名。

    返回中指定的端口号,如果没有,返回空字符串。

    返回页面使用的协议。

    返回的查询字符串。

    改变浏览器位置的方法:

    属性。

    对象其他属性也是可以改变

    是重新定向

    重新加载当前显示的页面

    对象保存了用户在浏览器中访问页面的历史记录

    回到历史记录的上一步

    示例:

    var btn = document.getElementById("btn");

    // 点击btn按钮时回到历史记录的上一步

    btn.onclick = function(){

    //history.back();

    history.go(-1);

    }

    历史记录的下一步

    回到历史记录的前n步

    回到历史记录的后n步

    对象属性

    返回可用的屏幕宽度

    返回可用的屏幕高度

    获取窗口文档显示区的高度和宽度,可以使用和

    对象

    示例:

    // 检测浏览器类型

    function getBrowser(){

    // 获取userAgent属性

    var explorer = navigator.userAgent.toLowerCase(),browser;

    if(explorer.indexOf("mise")>-1){

    browser = "IE";

    }else if(explorer.indexOf("chrome")>-1){

    browser = "chrome";

    }else if(explorer.indexOf("opera")>-1){

    browser = "opera";

    }else if(explorer.indexOf("safari")>-1){

    browser = "safari"

    }

    return browser;

    }

    闭包

    什么是执行上下文环境?

    console.log(a); // undefined

    console.log(this); //window

    b(); // b() is not a function

    c(); // "c"

    var a = "a";

    var b = function () {

    var b = "b"

    console.log(b);

    }

    function c () {

    var c = "c"

    console.log(c);

    }

    上下文栈就是一个存储执行上下文的栈,栈中只有一个上下文是处于活动状态的,执行全局代码时就会有一个全局上下文被压入栈,调用一个函数时就会产生一个函数的上下文环境,然后将其压入栈

    js的作用域 - 词法作用域

    js的作用域是词法作用域(静态作用域),实际上大部分的语言作用域都是词法作用域,与词法作用域相对的是动态作用域

    什么是闭包

    闭包是指有权访问另一个函数作用域中变量的函数。

    闭包的使用

    作用域链指向的变量对象

    闭包的形成及优缺点

    形成闭包即要把一个函数当成值传递,该函数还引用另一个函数的作用域链使得被引用的函数不能被回收

    优点:

    ❤️关注+点赞+收藏+评论+转发❤️,原创不易,鼓励笔者创作更好的文章

    

    点赞、收藏和评论

    

    我是(达达前端),感谢各位人才的:点赞、收藏和评论,我们下期见!(如本文内容有地方讲解有误,欢迎指出☞谢谢,一起学习了)

    

    我们下期见!

    

    文章持续更新,可以微信搜一搜「 程序员哆啦A梦 」第一时间阅读,回复【资料】有我准备的一线大厂资料,本文 已经收录

    

    收录,欢迎: