1、浏览器
浏览器分为三大部分:shell,内核,其他模块
内核分为:渲染引擎,js引擎
渲染引擎负责:html,css,基础语法的识别,以及如何绘制
js引擎负责z执行javascript
js的特色:解释性语言,单线程
2、数据类型
数据类型分为:值类型,引用类型
值类型:number,Boolean,String,undefine,null
引用类型:Array,Object,function
3.’+’
任何类型与字符串相加结果都为字符串
4、typeof()
1、typeof可以不加括号直接空格
2、返回的数据类型有:number,string, boolean, object,undefine,function
3、 typeof()可以使用未经定义的变量,并不会报错返 回undefine , typeof(a)=undefine,则typeof(typeof(a))=string
4、数组,对象,null使用typeof返回object小写
只有使用toString 才可以返回array
typeof(null)返回object
5、数据类型转换:显示,隐式
显示类型:Number(),ParseInt(),parseFloat();
ParseInt():从数字位开始直到非数字位
undefined不可转换成数字类型得出的结果是NaN(非数)
6、–,++,+/-(正负)*/(乘除)可以将类型转换成数字类型
比如:var a=‘a’*1 ;
typeof(a)==number;
内部原理:Number(‘a’)*Number(1);
5、function
1、函数的声明方式三种:函数声明,命名函数表达式,匿名函数表达式
js里面的函数的形参与实参个数可以不同,因为函数里面有个伪数组arguments存储从实参传过来的数据
2、return的作用:终止函数,返回函数值
3、charAt[]将字符串的每一位抽出
4、暗示全局变量:任何变量未经声明就赋值,此变量为全局变量(window)所有
5、函数预编译
预编译过程:函数声明整体、变量声明整体提升(不是赋值),但函数表达式不变
预编译过程:
第一步 创建AO对象(执行上下文的存储空间库)
第二步 找形参与变量声明(函数内)将其赋值为undefine,名字相同的只要写一次
第三步 将形参与实参统一
第四步 找函数声明,将函数声明赋值函数体、
完成后开始执行函数
第五步函数执行,已经在预编译提升过得就不用再看
全局的预编译去烧第三步,没有这一步
6、闭包
但凡内部的函数被保存到外部则会形成闭包,闭包会造成作用域链不被释放,造成内存泄露。
闭包的主要作用:实现公有变量(如累加器),做缓存,实现封装和属性稀有化,模块化开发,防止污染全局变量
立即执行函数,一般针对初始化函数,只被执行一次就销毁
格式:(function(){})
7、原型(prototype)
原型是函数对象的一个属性,他定义了构造函数制造出的对象的公有祖先
构造函数的名一定要首字母大写
利用函数constructor()查看构造器,即查看对象的构造函数
修改原型的属性必须是: 类名.prototype.属性名=‘value’
//所有对象的原型是Object.prototype,(有歧义以后再说)
绝大多数对象的最终原型是Object.prototype,因为object.crate(null)没有原型
undefine和null不可以访问toString()方法是因没有原型
8、this
this指向window:预编译过程的this指向window
全局域里的this指向window
this不new之前默认为是window的
谁调用function则this就指向谁,如果没有调用,自己执行,则走预编译过程,this指向window
call()里面传参第一位为指向this
call和apply会改变this指向,实际开发用于借别人的方法实现功能
call和apply的区别:call(this指向,形参(可多个))
apply(this指向,数组)
9、hasOwnProperty
hasOwnProperty(属性)判断该属性是否是自己的,一般用于不使原型出现
一般使用for in循环遍历对象,包含原型,in可判断该属性是否在该对象上,或者说在该对象上能否访问到
10、undefine和unll
undfine>0 ---->false <------- unll>0
undine<0 -------flase <------- unll< 0
unfine=0 ---->false <------- unll=0
所以有undfine=null
11、parseInt(num,基底)
1、当parseInt(num)只有一个数时默认num为十进制的数并赚换成整形
2、当parseInt(num,基底)则认为num是以基底为准的进制数转换成十进制的整型如
var num=12;
parseInt(num,16)即num为16进制转换成10进制整型
其作用是将其他进制转换成10进制
3、parseInt()一般是从数字开始识别到非数字
如var a=“123abc”;
parseInt(a)=123;
12、toString()
1、undefine和null不可以使用toString()因为没有原型
2、用法有两种:var a=12;
a.toString()将a转换成字符串
a.toString(8)将a转换成8进制
即toString(目标进制)
3、将二进制转换成16进制的做法
var a=101010101;
var test=parseInt(a,2);
test.toString(16);
13、isNaN()
内部原理会将参数进行Number()然后与NaN进行比较
如isNaN(123)=false
isNaN(“123”)=false
isNaN(“abc”)=ture
isNaN(null)=ture因为Number(null)=0
而Number(undefined)=NaN
14、NaN
NaN==NaN----->false所以NaN都不等于任何东西