变量的提前声明(全局作用域) - 我们知道js的代码是自上而下执行的.如下,console.log(a)在var a=10前面,但是结果输出的是undefined. - 使用var关键字声明的变量,会在所有的代码执行之前被声明(但是不会赋值):也就是说在执行代码之前凡是var 声明的变量都已经是存在了,就已经是在栈内存中了. - 但是如果声明变量时不适用var关键字,则变量不会被声明提前,会报错. 函数的提前声明(全局作用域) - 创建一个函数有3中方式,其中函数声明方式和上边var 声明变量是…
这个系列博客主要用来记录本人学习JavaScript的笔记,从0开始,即使有些知识我也是知道的.但是会经常忘记,干脆就写成博客,没事的时候翻来看一看,留下一点学习的痕迹也好.可能写博客的水平暂时不太好,但是慢慢来吧! 想要走前端开发的路,JavaScript是最核心的内容,必须熟练掌握,尽量不要急于求成,把一些东西理解得比较透彻再去接触像vue之类的一些框架,不然学了也等于白学.好,废话不多说,直接开始JavaScript的学习. 首先JavaScript是解释型语言,和Java语言不一样,不需…
原型(prototype) - 创建一个函数(所有函数)以后,解析器都会默认在函数中添加一个属性prototype prototype属性指向的是一个对象,这个对象我们称为原型对象. 创建一个函数MyClass(). function MyClass(){} - 当该函数作为构造函数使用,它所创建的对象中都会有一个隐含的属性指向该原型对象. 这个隐含的属性可以通过对象.__proto__来访问.如果这个函数是个普通函数,那么prototype属性也没什么作用. 调用构造函数,创建一个对象. va…
数的形参(形式参数) - 定义函数时,可以在()中定义一个或多个形参,形参之间使用英文逗号隔开:定义形参就相当于在函数内声明了对应的变量但是并不赋值,形参会在调用时才赋值. 函数的实参(实际参数) - 调用函数时,可以在()传递实参,传递的实参会赋值给对应的形参. - 调用函数时JS解析器不会检查实参的类型和个数. 如果实参的数量大于形参,多余实参将不会赋值 如果实参的数量小于形参,则没有对应实参的形参将会赋值undefined,如下a的值为1,形参b没有实参值为undefined:a+b结果为…
常量:就是改变不了的,也是可以直接使用的. 变量:可以改变的,不确定的. var =123456; 通过 var 声明一个变量,同时赋值给它 标识符:在JS中所有的可以自主命名的内容,都可以认为是一个标识符, -比如:变量名.函数名.属性名 -规范: 1.标识符中只可以含有字母.数字._.$ 2.标识符不能以数字开头 3.标识符不能是JS中的关键字和保留字 4.标识符一般采用驼峰命名法 其实在JS底层,保存标识符采用Unicode编码,理论上utf-8含有的内容都可以作为标识符 var 中文=1…
匿名函数 - 用函数声明的方式创建一个函数时,不加函数名称. function sum(){ console.log("我是函数sum")} - 不加名称,这样写浏览器是会报错的. function(){ console.log("这是一个匿名函数")} - 正确写法,在外面加(),浏览器不会报错,但是要如何执行? ( function(){ console.log("这是一个匿名函数"); }) - 在后面再加()就运行了,代码运行到那块了,执…
函数(Function) - 函数也是一个对象,也具有普通对象的功能 - 函数中可以封装一些代码,在需要的时候可以去调用函数来执行这些代码:当调用函数时,函数中封装的代码会按照顺序执行. - 使用typeof检查一个函数时会返回function - 创建函数有三种方式 1.通过构造函数方式:实际开发中基本不用 var fun = new Function("console.log('Hello 这是我的第一个函数');"); 2.函数声明方式 function 函数名([形参1,形参2…
作用域 - 作用域指一个变量的作用的范围 - 在JS中一共有两种作用域 1.全局作用域 - 直接编写在script标签中的JS代码,都在全局作用域- 全局作用域在页面打开时创建,在页面关闭时销毁 - 在全局作用域中有一个全局对象window,它代表的是一个浏览器的窗口,它由浏览器创建我们可以直接使用. - 在全局作用域中:创建的变量都会作为window对象的属性保存 创建的函数都会作为window对象的方法保存,这里有没有想起alert()方法 - 全局作用域中的变量都是全局变量,在页面的任意的…
方法 - 听了不少调用什么什么方法,所以方法究竟是啥东西? - 如果一个函数作为一个对象的属性保存,那么我们称这个函数时这个对象的方法,调用这个函数就说调用对象的方法(method). 创建一个对象 var obj = new Object(); 添加属性 obj.name = "maoweizhao"; obj["age"] = ; 对象的属性值可以是任何的数据类型,所以保存函数. obj.sayName = function(){ console.log(obj…
逻辑运算符 ! 非 - 非运算可以对一个布尔值进行取反,true变false false边true - 当对非布尔值使用!时,会先将其转换为布尔值然后再取反 - 我们可以利用 !! 来将其他的数据类型转换为布尔值(隐式转换) 首先null赋值给变量a,通过!a运算后,null转换为了boolean值true,然后再一次!a,值变为false.null值变成boolean值就是false,所以通过两次非运算也能将一个其他类型的值转换为boolean类型的值,原理和Boolean()函数是一样的.…
运算符(操作符) 在JS中 +.-.*./.%这些都是算数运算符,typeof也是一个运算符,它的操作结果就是得到一个描述变量数据类型的字符串. + 运算符 1.两个值在都没有string类型的值的情况下相加,如果都是number类型,则做数学加法运算,如果存在非number类型的,会把它先转换为number类型再做数学加法. 其实,在没有string类型的情况下,又除开number类型以外,基本数据类型中就剩 boolean.undefined.null这三个数据类型了. number+num…
-强制类型转换为String 1.方式1 调用被转换数据的toString()方法 number类型值.布尔类型值.都可以调用toString()方法强制转换.但是null值和undefined值不行,这两个类型的值没有toString()方法. 补充一下toString方法的知识,其实还可以当一个简单的进制转换器,因为是初学阶段,所以对于这个方法的学习后续再继续补充. 十进制装换为其他进制. .toString(2)表示转换为2进制 .toString(8)表示转换为8进制 .toString…
JavaScript中有6种数据类型 一.基本数据类型 - String 字符串 JS中的字符串需要使用引号引起来双引号或单引号都行 但是要注意的是某种引号嵌套使用的话,需要加上 \ 转义.比如说我们要输出一句话. var str="面试官问我:"你在学校最有价值的经历是什么?"" 这样使用引号是会报错的. 报错原因:你在学校最有价值的经历是什么?这一句首先没有被引号括起来,被识别为标识符,并且是非法的. var str="面试官问我:\"你在学…
String对象 在底层,字符串是以数组的形式保存的.比如说一个字符串"String"以["H","t","r","i","n","g"]形式保存.所以Sting对象有个属性length,可以获取字符串(对象)的长度.其实这个对象加不加都可以,因为字符串变量也会经过包装可以使用String对象的属性和方法. charAt()- 根据索引获取指定的字符 charCode…
包装类 - 在JS中为我们提供了三个包装类: String() Boolean() Number() - 通过这三个包装类可以创建基本数据类型的对象 例子: var num = new Number(2); var str = new String("hello"); var bool = new Boolean(true); - 但是在实际应用中千万不要这么干,为什么?因为会出现问题啊! bool是一个对象,转换为boolean值永远都是true. 那这个包装类有什么作用呢? 思考一…
Math - Math属于一个工具类,它不需要我们创建对象(例如Date日期对象需要通过构造函数创建对象 var 变量=new Date(),Math不需要),它里边封装了属性运算相关的常量和方法 我们可以直接使用它来进行数学运算相关的操作 - 方法: Math.PI - 常量,圆周率 Math.abs() - 绝对值运算 Math.ceil() - 向上取整 Math.floor() - 向下取整 Math.round() - 四舍五入取整 Math.random() - 生成一个0-1之间的…
arguments (封装实参的对象) 在调用函数时,浏览器每次都会传递进两个隐含的参数:1.函数的上下文对象 this2.封装实参的对象 arguments- arguments是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度- 在调用函数时,我们所传递的实参都会在arguments中保存 - arguments.length可以用来获取实参的长度 - 我们即使不定义形参,也可以通过arguments来使用实参, - arguments对象里边有一个属性叫做callee,这个属性对…
遍历数组 - 遍历数组就是将数组中元素都获取到 - 一般情况我们都是使用for循环来遍历数组: - 使用forEach()方法来遍历数组(不兼容IE8) forEach()方法需要一个回调函数(由我们创建,但是不由我们调用的函数)作为参数,数组中有几个元素,回调函数就会被调用几次,如下图输出了7次. 每次调用时,都会将遍历到的信息以实参的形式传递进来,我们可以定义形参来获取这些信息. 先给回调函数定义三个形参,函数被调用时,浏览器会传递三个实参进来. a:正在遍历的元素 b:正在遍历元素的索引,…
数组的一些方法 - push() - 用来向数组的末尾添加一个或多个元素,并返回数组新的长度 - 语法:数组.push(元素1,元素2,元素N) - pop() - 用来删除数组的最后一个元素,并返回被删除的元素 - unshift() - 向数组的前边添加一个或多个元素,并返回数组的新的长度 - shift() - 删除数组的前边的一个元素,并返回被删除的元素 - slice() - 可以从一个数组中截取指定的元素 - 该方法不会影响原数组,而是将截取到的内容封装为一个新的数组并返回 - 参数…
构造函数 - 构造函数是专门用来创建对象的函数 创建一个对象时,通过构造函数的方式来创建.这是通过Object()这个构造函数来创建的一个实例obj. var obj=new Object(); - 一个构造函数我们也可以称为一个类 想要创建一个人的类 function Person(){ } - 构造函数就是一个普通的函数,只是他的调用方式不同, 如果直接调用,它就是一个普通函数. Person(); 如果使用new来调用,则它就是一个构造函数,通过构造函数Person创建了一个per实例.…
this(上下文对象) - 我们每次调用函数时,解析器都会将一个上下文对象作为隐含的参数传递进函数. 使用this来引用上下文对象,根据函数的调用形式不同,this代表的对象也不同.不同的情况: 1.以函数的形式调用时,this是window对象 2.以方法的形式调用时,this就是调用方法的对象 3.以构造函数的形式调用时,this就是新创建的对象 4.使用call()和apply()调用时,this是指定的那个对象 call()和apply()- 这两个方法都是函数对象的方法,需要通过函数对…
栈内存 - JS中的变量都是保存到栈内存中的,- 基本数据类型的值直接在栈内存中存储,- 值与值之间是独立存在,修改一个变量不会影响其他的变量 堆内存 - 对象是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟出一个新的空间,- 而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,- 当一个通过一个变量修改属性时,另一个也会受到影响.注意是修改对象属性,修改变量值是不会影响另一个.例如obj2=null;只是这个变量obj2的值不再是堆内存地址的值,obj变量…
对象的基本操作 - 创建对象 - 方式一:使用new关键字调用的函数,是构造函数(constructor),构造函数是专门用来创建对象的函数. var obj = new Object(); - 方式二: var obj = {}; - 添加属性 - 属性名:对象的属性名没有任何要求,不需要遵守标识符的规范,但是还是尽量按照标识符规范去写. - 属性值:可以任意的数据类型. - 方式一:在对象中保存的值称为属性.语法:对象.属性名 = 属性值; obj.name = "mao"; ob…
for循环 - 语法: for(①初始化表达式 ; ②条件表达式 ; ④更新表达式){ ③语句... } - 执行流程: 首先执行①初始化表达式,初始化一个变量,(这里只会执行一次) 然后对②条件表达式进行求值判断,如果为false则终止循环 如果判断结果为true,则执行③循环体 循环体执行完毕,执行④更新表达式,对变量进行更新. 更新表达式执行完毕重复②…
关系运算符 - 关系运算符用来比较两个值之间的关系的 >.<.<=.>= 先说这四个.如果关系成立则返回true,关系不成立则返回false. - 如果比较的两个值是非number类型值,会将其转换为number类型值然后再比较.特殊情况:如果比较的两个值都是字符串,此时会比较字符串的Unicode编码,而不会转换为number. 其实就按正常逻辑的理解来就行了,就两个数比较,是对的表达式就返回true,不对就返回false,不管谁和NaN比较都是返回false. 如果两边都是st…
JavaScript代码一般编写在哪里呢? 看到这个问题,第一个反应就是,JavaScript那当然是编写在<Script></Script>这对标签中啊!然而! 1.可以编写到标签的指定属性中 <button onclick="alert('写在onclik属性中');">按钮</button> <a href="javascript:alert('写在href属性中');">超链接</a>…
事件(Event) - 事件指的是用户和浏览器之间的交互行为.比如:点击按钮.关闭窗口.鼠标移动.... - 我们可以为事件来绑定回调函数来响应事件. - 绑定事件的方式: 1.可以在标签的事件属性中设置相应的JS代码,不方便维护,不建议使用. 例子: <button onclick="alert('点击触发事件');">按钮</button> 2.可以通过为对象的指定事件属性设置回调函数的形式来处理事件 例子: <!DOCTYPE html> &l…
正则表达式的使用 先说RegExp对象的一个方法 test() - 使用这个方法可以用来检查一个字符串是否符合正则表达式的规则,如果符合则返回true,否则返回false. 1.用正则表达式来检查一个字符串中是否含有字母a var reg = new RegExp("a"); var s="abcdef"; console.log(reg.test(s)); 创建了一个RegExp对象reg,匹配规则是含有字母a,匹配模式没写,然后创建一个字符串s,reg调用方法t…
RegExp 对象 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具. 创建 RegExp 对象的语法(构造函数方式): pattern:正则表达式,attributes:匹配模式 var reg=new RegExp(pattern, attributes); 直接量语法(字面量方式):类似于var obj={}:var arr=[]. var reg=/pattern/attributes…
Date - 日期的对象,在JS中通过Date对象来表示一个时间 - 创建一个当前的时间对象 var d = new Date(); - 创建一个指定的时间对象 var d = new Date("8/12/2020 23:40:50"); - 方法: getDate() - 当前日期对象是几日(1-31) getDay() - 返回当前日期对象时周几(0-6) - 0 表示周日.1表示周一... getMonth() - 返回当前日期对象的月份(0-11) - 0 表示一月.1表示二…