Js基础
一、js的介绍
1、js的组成
ECMAScript 是JavaScript的语法规范,DOM是JavaScript操作网页上元素的API,BOM是JavaScript操作浏览器部分功能的API
2、js标签
<script src=”” async=”async”></script> 或defer
async 异步 立即异步下载外部js,不影响页面其他操作,js下载完毕立即执行,Defer 值可以省略,脚本延迟到文档完全被解析和显示后再执行,只有外部的脚本可以使用
二、js变量和数据类型
1、变量
变量的声明:使用var来声明变量,赋值时确定其数据的类型;
局部变量必须用var声明,全局变量可以用var,也可以不用var;变量名前不加var一定是全局变量
2、数据类型
简单数据类型(基本):number、string、boolean、undefined、null
复杂(引用)数据类型:object、array、date
1)基本包装类型:String Number Boolean
a数值类型(number)包括整型和浮点型;
b字符串(String)js没有字符的概念,用单引号或双引号括起来;
c布尔类型(boolean);
d空类型(null)代表空,代表没有值,什么类型都不是;
e未定义(undefined)使用了一个未赋值的变量或者是使用了一个不存在的对象的属性时,才返回undefined;
f复合数据类型(引用类型):对象(window/document)、数组(可以是任意数据类型);
g用typeof()可以判断数据的类型,特殊:用typeof判断null值返回object,目的是向下兼容
Var num=new Number(“1”);此时num是基本包装类型 如果varnum=Number(“1”);则num是基本类型
基本数据类型不能调用属性和方法,对象可以调用属性和方法
查看数据类型 typeof()
3、命名规则
区分大小写;注释:单行// 多行/* */;语句行:以;分隔,也可以不加分号自然行分隔;
变量的定义:无论什么类型都用var来定义变量,也可以不定义直接使用
变量的命名:数字、字母、下划线、$符号,不能以数字开头
5)JavaScript中的输出语句:
alert(字符串) 弹出提示框(确定)
Window.alert() 弹出一个只包含“确定”按钮的对话框,显示字符串内容,无返回值
confirm() 弹出个确认框(确定,取消)按确定,返回true;按取消返回false
prompt() 弹出个输入框,让你输入东西,包含确定和取消
Window.prompt 参数有两个,第一个参数显示提示输入框的信息,第二个参数,用于显示输入框的默认值,返回用户输入的值
document.write()
Write(“信息”):向文档中写内容,可包含文本与 其他标签
判断返回值的类型 typeof;js中没有字符类型
console.log() console.info() console.print()
4、运算符
优先级从高到低
()优先级最高
一元运算符:++ -- !
算术运算符 先* / % 后+ -
关系运算符 > >= < <=
想等运算符 == != === !==
逻辑运算符:&& ||
5、循环、判断
if while for do...while
还有continue(退出当前循环,执行之后的循环)以及break(立即跳出循环)
6、数组
一维数组特点:长度可变;元素类型任意
var 数组名=new Array(元素0,元素1...);
var 数组名=new Array();
var 数组名=[元素0,元素1,...]
数组中的方法:
concat() 拼接两个数组,返回一个新的数组
join()返回一个新的数组,参数是字符串,相当于更改连接符
reverse()将元素反转
sort()将元素由小到大按照字典顺序排序
toString()以字符串输出所有元素
slice(start,[end])以数组形式取出对应的元素,不包含end对应的元素
pop与push:pop移除最后一个元素并返回该元素值;push将一个或多个原色添加到数组结尾,并返回数组新长度,如果添加的是数组则先用逗号,将该数组的各元素连接起来再添加。
注意冒泡排序(重点)
三、js中的函数
1、函数定义的两种方式:
函数声明:function 函数名(){}
函数表达式:var 函数名=function(){}
注意:函数由关键字function定义;函数必须先定义后使用,否则将出错;函数名是调用函数时的名称,区分大小写
函数的参数:可以是常量,也可以是变量,不用var定义
函数的返回值:return语句用于返回表达式的值,也可以没有
函数调用的时候,可以直接使用函数名进行调用,也可以由window对象来调用
2、内建函数
Number(字符串) 用于将字符串转换成数字,若参数无法转换成数值,则返回NaN
isNaN()用于测试指定的数字串是否为数值,返回true则不是数值,false是数值
parseInt()剖析数字字符串并返回指定进制的整数,parseInt(“字符串”,[进制]),剖析过程中遇到不合法字符,返回已经剖析过的数值。如果开始就遇到不合法字符,会返回NaN
parseFloat() 剖析数字字符串并返回浮点数
eval() 就收字符串参数,将最后结果以上下文环境执行,并返回执行结果
boolean对象
3、重点注意
false对象:数值0、NaN、undefined、空字符串””、-0、null
浮点数的加减结尾都有小数点;
Max_value最大值 min_value最小值 Infinity无穷大
字符串的不可变:当字符串被赋值后,会在内存中开辟空间,但是当重新赋值后,又会开辟新的空间
几乎所有的值都有toString()方法,除了undefined、null
转换成字符串的三种方法:toString()、String()函数、字符串拼接,
toString()与String()函数的区别:String()可以将undefined、null转换成字符串
转换成数值类型:number()如果有不是数值的字符返回NaN、parseInt()、parseFloat() parseFloat()只能解析10进制
JavaScript中不允许定义同名的函数,也就是说不允许重载,会覆盖掉原来的方法
4、匿名函数:
没有命名的函数,一般用在绑定事件的时候 语法: function(){}
自调用函数:(function(){alert(“hekllo”)}){}
三、js中的预解析
面试题:
Javascript中的解析器:
预解析:全局作用域
先找var、function和参数,找到var和function之后,会把var和function提前,然后再从上到下一行一行执行代码
预解析:执行到函数后,会进入到局部作用域,然后预解析再从上到下一行一行执行代码
Var a=b=c=9;这样解析的过程中 a是局部变量,b和c是全局变量
变量提升:
定义变量的时候,变量的声明会被提升到作用域的最上面,变量的赋值不会提升
函数提升:
JavaScript解析器首先会把当前作用域的函数声明提前到整个作用域的最前面
总结:
预解析:在解析之前完成;预解析的时候变量的声明和函数的声明会提升(提前),变量的赋值不会被提升;如果变量在函数内部声明,提升的时候只能提升到函数内部的最上面(不能出去);预解析的时候如果在多对的script中出现了同名的函数,相互之间没有影响
四、js中的对象和类
1、对象
var student=newObject();