JS基础知识总结
JS代码引入的注意问题:
* 在一对script标签中存在错误的js代码,那么该代码后面的js将不会执行
* 如果第一对script标签中的js代码有错误,但不会影响下一对script标签中的js代码的执行。
* 当html遵循h5的版本时,script标签中的type=“text/JavaScript” 或者language=”javascript”,可以省略。
* Html文件中可以出现多对script标签。
* Script标签一般放在body标签内的最后一行,有的时候也会出现在body中,如vue。
* 如果script标签通过src引入外部的js文件,那么这对标签中不要写代码。
JS中的原始数据类型:number,string,boolean,null,undefined,object
* 一个变量声明,但未赋值,输出则是undefined
* 函数没有明确返回值,如果用变量接受,输出则是undefined
* Undefine + number = NaN
如何获取变量的类型?
使用typeof(变量)或者typeof 变量(typeof 是关键字)
执行结果:
Number类型数字的范围
另外,js中的浮点数运算,精度不准确。不要把小数和小数放在一起比较,可能存在问题。
NaN不与任何数相等,包括它本身。需要判断一个值是否为NaN,使用isNaN()
-----------------------------------------------------------
-------------------------------------------------------------
isNaN():传入不是数字为真,是数字为假。
字符串的运算
如果你希望一个变量的值是null,你必须直接赋值null,别无他法。
类型转换
* 其他类型转数字:
----------------------------------------------
----------------------------------------------
* 其他类型转字符串类型。
toString不能转null,undefined这类值,会产生报错
结果:
----------------------------------------------
结果:
3.其他类型转布尔。
----------------------------------------------
==只比较值是否相等,不比较类型。
===比较值和类型是否都相等。
数组的定义:
* 通过构造函数创建数组
结果:[]
----------------------------------------------
结果:
----------------------------------------------
* 通过字面量的方式创建数组
结果:[]
----------------------------------------------
数组中可以存放各种数据类型:
遍历数组
ForEach()中的回调函数第一个参数为元素,第二个参数为索引
函数的定义
Function foo(){},
如果你定义的函数与js内置的函数重名,而会覆盖系统函数
浏览器不会出现弹框。
----------------------------------------------
函数中的形式参数和实参数量可以不一致。
----------------------------------------------
当函数没有返回值,但却用变量接收了,这个变量的值是undefined
----------------------------------------------
当函数没有明确返回值时,接收函数返回值的变量为undefined
----------------------------------------------
函数中的参数列表是数组的形式,但这个数组是伪数组。
结果:
----------------------------------------------
函数的其他定义方式:
正常的函数声明
----------------------------------------------
函数表达式:把一个匿名函数赋值给一个变量
函数表达式后面需要加上分号
----------------------------------------------
如果函数声明被覆盖,无论在什么位置调用函数,都是调用新声明的函数。
----------------------------------------------
若函数表达式被覆盖,则调用函数执行当前声明的函数
----------------------------------------------
如何调用匿名函数?
在声明的时刻即调用,只能执行一次。
----------------------------------------------
如何获取一个函数的数据类型?
----------------------------------------------
函数作为参数使用
一个函数作为参数转递,此函数称回调函数。
-----------------------------------------------
函数作为返回值。
----------------------------------------------
作用域
使用var声明的变量,没有块级作用域,作为全局变量使用,太多的全局变量,不及时的释放,会占用内存。
----------------------------------------------
只有在函数内部定义的变量,有属于局部变量,外部不可访问。
------------------------------------------------
隐式全局变量的声明
结果:
----------------------------------------------
隐式全局变量可以删除
----------------------------------------------
作用域链
结果:30
使用的变量在当前作用域寻找,若当前作用域不存在该变量,则向上查找,若直到全局作用域也没有找到该变量,则该变量的值为undefined
----------------------------------------------
预解析
当你在变量未声明或者函数没有声明前,使用变量或者函数,则会产生预解析,将变量的声明和函数的声明提前到你使用的变量或者函数的作用域的最上面。
结果:
----------------------------------------------
预解析分段问题
结果:
----------------------------------------------
结果:
多对script标签中的函数重名,预解析不会冲突。
----------------------------------------------
结果:
----------------------------------------------
结果:
----------------------------------------------
----------------------------------------------
创建对象
* 调用系统构造函数创建对象
在对象方法的内部,使用this访问对象的属性,instanceof判断person是否是object实例。
---------------------------------------------------
如何一次性创建多个对象?
把创建对象的代码封装在函数中。
----------------------------------------------
这样每次创建出来的对象,属性都一样了。通过传递参数,改变对象的基本属性,这种方式称为工厂模式创建对象。
----------------------------------------------
* 自定义构造函数,创建对象。
同理,如果需要创建多个对象,可以给函数传递参数的方式。
----------------------------------------------
用自定义构造函数创建对象时,发生了什么?
* 申请内存空间,存储创建的新的对象
* 把this设置成当前对象
* 设置对象的属性和方法值。
* 把this这个对象返回。
创建对象时保存在堆上的,实例是取存放在栈中的当前对象的地址的引用。
* 字面量的方式创建对象
字面量创建的对象属于一次性的对象。
访问对象的属性另外一种形式,通过[属性名],索引到某个属性。
----------------------------------------------
JSON对象
Json对象不论是键,还是值都是用双引号引起来的。
----------------------------------------------
Json数据的遍历,不能使用for循环,但是可以使用for-in
----------------------------------------------
基本数据类型(值类型):number,string,boolean
复杂类型(引用类型):object
空类型:undefined,null
----------------------------------------------
值类型的值存储在哪里? 栈中存储具体的值
引用类型的值存储在哪里?栈存放地址和堆中存放代码块
值类型赋值传递的是值。
引用类型赋值,传递的是地址。
----------------------------------------------
静态对象:对象={}.名称 = function(){},以这样的形式创建的对象,称静态对象。
JS中的三种对象:
* 内置对象
* 自定义对象
* 浏览器对象
------------------------------------------------------
内置对象:Math,Date,String,Array,Object
内置对象中Math的常用方法
Math.PI
Math.abs()
Math.ceil()
Math.floor()
Math.max()
Math.min()
Math.pow()
Math.sqrt()
Math.random()
----------------------------------------------
内置对象中Date的常用方法
----------------------------------------------
----------------------------------------------
字符串对象
Str 值hello存放在栈上
S中存放的是地址,指向new String时申请的地址,new String(‘hello’) 存放在堆上。
----------------------------------------------
字符串特性:不可变性
----------------------------------------------
-----------------------------------------------------
字符串的常见方法
、
结果:
----------------------------------------------
结果:
----------------------------------------------
结果:
----------------------------------------------
结果:
----------------------------------------------
结果:
----------------------------------------------
结果:、
----------------------------------------------
结果:
----------------------------------------------
结果:
----------------------------------------------
结果:
----------------------------------------------
结果: