本文旨在帮助读者回顾最基础的JavaScript有些什么。尚不涉及ES6相关知识点。
(ง •_•)ง加油5分钟读完,助你更上一层楼咯~
文章目录
1.数据,内存和变量分别是什么?
1.什么是数据?
存储在内存中代表特定信息的’东东’,本质上是0101…
2.什么是内存?
内存条可存储数据的空间(临时的)
3.什么是变量?
可变化的量,由变量名和变量值组成
每个变量都对应一小块内存,变量名用来查找对应的内存,变量值就是内存中保存的数据
4.内存,数据,变量三者之间的关系
内存中除了它存储的数据之外还有一个地址值
变量是内存的标识,内存是用来存储数据的空间
内存中所有操作的目标:数据
2.数据类型
基本(值)类型
基本类型保存的是该基本类型的实际数据
String:任意字符串
number:任意数字
boolean:true/false
undefined:undefined
null: null
undefined和null的区别:
undefined是定义了未赋值,null是定义了赋值为空值,一般适用于回收垃圾对象
对象(引用类型)
引用对象保存的是地址值(该知识点涉及到堆内存与栈内存)
Object:对象 ,函数和数组也为对象
Function:函数,一种特别的对象,可以执行其中的代码
Array:数组,一种特别的对象(属性有数值下标),数组的内部数据是有序的
什么是对象?
对象和变量一样都是存储数据的,区别是对象可以存储多个数据
对象的组成是属性名和属性值,属性名是字符串,属性值可以是任意类型的数据,如果是函数,则称作方法
3.什么是回调函数?
1.你定义的
2.你没有调用
3.但最终它执行了
常见的现在2个DOM事件回调函数:比如点击事件
和定时器回调函数setTimeout(回调函数,间隔使用的时间)
4.回调代码会异步执行
4.为什么JavaScript是单线程?
作为浏览器脚本语言,Javascript的主要用途是与用户互动,以及操作DOM,
这决定了它只能是单线程,否则会带来很复杂的同步问题。
比如两个线程1和2 1要更新p标签,2要删除p标签,那么线程切换的时候线程1判定p还在会去更新,但是结果报错了
5.DOM和BOM是什么?
DOM
全称Document Object Model
文档对象模型
可以通过JavaScript操作网页
DOM模型用一个逻辑树来表示一个文档,树的每个分支的终点都是一个节点(node),每个节点都包含着对象(objects)。DOM的方法(methods)让你可以用特定方式操作这个树,用这些方法你可以改变文档的结构、样式或者内容。节点可以关联上事件处理器,一旦某一事件被触发了,那些事件处理器就会被执行。
节点:网页中的每一个部分都是节点
但是具体节点不同
文档节点:整个HTML文档
元素节点:HTML文档中的HTML标签
属性节点:元素的属性
文本节点:HTML标签中的文本内容
BOM
全称Browser Object Model
浏览器对象模型
BOM可以使我们通过JS来操作浏览器
在BOM 中为我们提供了一组对象用来完成对浏览器的操作
对象名 | 解释 |
---|---|
Window | 代表的是整个浏览器的窗口,同时也是网页中的全局对象 |
Location | 代表当前浏览器的地址栏信息,通过Location可以获取地址栏信息,或者操作浏览器跳转页面 |
Screen | 代表用户的屏幕的信息,通过该对象可以获取到用户的显示器的相关的信息 |
History | 代表浏览器的历史记录,该操作只有当次访问有效 |
这些BOM对象在浏览器中作为Window对象的属性保存的.
可以通过window对象来使用,也可以直接使用
6.正则表达式
我们用正则表达式来检查一个字符串是否符合规则
创建正则表达式的对象:
var reg =new RegExp(“正则表达式”,“匹配模式”)
或者reg = /字面量/ 匹配模式 (更为推荐)
在构造函数中可以传递匹配模式作为第二个参数,可以是i(忽略大小写)或者 g(全局匹配模式)
正则对象的方法
test()
检查一个对象是否符合正则表达式的规则,符合就是true,不符合就是false,严格区分大小写
reg = /a{3,}/ 表示a出现3次以上
reg = /a{1,3}/ 表示a出现1到3次
reg = /(a){3}/ 表示a出现的次数是3次
reg = /a|b/ 表示a或者b
reg = /ab+c/ 至少有一个b
reg = /ab*c/ b有0个或以上
reg = /ab?c/ 只能有0个或一个b
reg = /^a/ 检查一个字符串是否以a开头
reg = /a$/ 表示以a结尾
.
表示任意字符 \.
表示.
\w任意字母数字下划线 \W相反
\d 任意数字 \D正好相反
\s 空格
\b单词边界 \B除了单词边界 想要区分child 和children \bchild\b
下面是运用的正则表达式规定一个邮件格式的例子:
<script>
/*1.开头是任意字母数字下划线可以跟着点如abc.efg
2.@
3.任意字母数字
4. 必须以点 + 任意字母2-5位结尾
*/
var emailreg = /^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/;
var email = "abc@qq.com";
console.log(emailreg.test(email)) //true
</script>
7.argument关键字
在调用函数时,浏览器每次都会传递进两个隐含的参数;
1.函数的上下文对象
2.封装实参的对象arguments
-argument是一个类数组对象,它可以通过索引来操作数据,也可以获取长度
-在调用函数时,我们所传递的实参都会在argument中保存
-arguments.length可以获取实参的长度
-即使不定义形参也可以通过argument来使用实参,只不过比较麻烦
arguments[0]表示第一个实参
-arguments.callee这个属性对应当前正在执行的函数对象自己,也就是自己调用自己。
总结:arguments存储了所有该函数的实参,可以通过下标索引到每一个实参,也可以知道该类数组的长度,但是无法使用数组的方法.
8.call和apply的区别是什么?
fun.call() 和fun.apply() 都等于fun()
当对函数调用call和apply都会调用函数执行
在调用call和apply时可以将一个对象指定
此时这个对象将会成为函数执行时的this,因为直接fun()函数中的this 是window
fun.call(obj,1,2)方法可以将实参在对象之后依次传递
apply方法需要将实参封装到一个数组中统一传递fun.apply(obj,[2,3])
this的情况
1.在全局中以函数的形式调用,如fun()
,this永远是指向window
2.作为对象方法的形式调用时,如obj.fun()
,this指向调用方法的对象obj
3.以构造函数的形式调用时,如var obj1 = new Objet(实参1,实参2)
,this指向新创建的对象obj1
4.使用call和apply调用时,如:fun.call(实参1,实参2)
,this是指定的那个对象
9.何为构造函数?
创建一个构造函数,专门用来创建特殊对象
构造函数习惯上首字母大写
构造函数和普通函数的区别就是调用方式的不同
普通函数是直接调用,而构造函数需要使用new关键字调用
构造函数的执行流程
1.立刻创建一格新的对象
2.将新建的对象设置为函数中的this,在构造函数中可以使用this来指向新建的对象
3.逐行执行函数中的代码
4将新建的对象作为返回值返回
使用同一个构造函数创建的对象我们称之为一类对象
使用instenceof可以检查对象是否是一个类的实例
console.log(对象 instenceof 构造函数)
所有的对象都是Object的后代,
10.作用域是什么?
JS 中有两个作用域
1.全局作用域:
-直接编写在script标签中的JS代码,都在全局作用域
-他在页面打开时创建,在页面关闭时销毁
-在全局作用域中有一个全局对象window,代表浏览器的窗口由浏览器创建我们可以直接使用
-创建的对象都会作为window对象的属性保存
2.函数作用域:
-调用函数时创建函数作用域,函数执行完毕后,函数作用域销毁
-每调用一次函数就会创建一个新的函数作用域,他们之间是相互独立的
-在函数作用域中可以访问到全局作用域的变量,反过来不行
-定义形参就相当于在函数作用域中申明了变量
此外在ES6还推出了块级作用域,不过那个留到ES6一起总结吧~😙
本期JS知识点分享先到这里,其实还有好几个点没讲,冒泡,原型和一些细碎的点…那么留到下一次分享给大家咯O(∩_∩)O!