JS的三种显示形式
1.通过链接外部的JS文件。
3.作为某个元素的事件属性值或是超链接的href的属性值。
屏蔽代码
1.<!--代码//-->
若浏览器不支持JavaScript则代码被屏蔽。
2.<noscript>代码</noscript>
当浏览器不支持JavaScript时,会执行noscript的内容。
JavaScript的基本语法
JavaScript的执行顺序
按照在HTML文件中出现的顺序依次执行。(若需要在HTML文件执行函数或全局变量,最好将其放在HTML的头部中。)
大小写敏感
JavaScript严格区分大小写。
忽略空白符和换行符
JavaScript会忽略关键字、变量名、数字、函数名或其他各种元素之间的空格、制表符或换行符,我们可以使用缩进、换行来使代码整齐,提高可读性。
语句分隔符
- 默认使用;结束语句。
- 可以把多个语句写在一行(每个语句尾部加;)。
- 最后一个语句的分号可以省略,但尽量不要省略。
- 可以使用{}括成一个语句组,形成一个块block。
- 通过 \ 可以实现对代码的折行操作。
注释
单行注释用//来注释,多行注释用/**/来双注释。
输出
通过document.write()想文档书写内容,通过console.log()向控制台写入内容。
JavaScript中的错误
语法错误通过控制台进行调试。
逻辑错误通过alert()进行调试。
声明变量
- 通过var关键字声明变量。
- 可以声明变量的同时给变量赋值。(若不赋值则变量的默认值为undefined)
- 一次可以声明一个变量也可以一次声明多个变量赋相同的值。
- 变量重名会产生覆盖,即后来定义的值级别更高。
- 变量名称严格区分大小写。(变量名称以下划线或字母开头)
数据类型与变量
原始数据类型
数值型
JavaScript中的数值包含整数和浮点数,所有数值都以双精度浮点型来表示。双精度浮点型可以表示-2的53次方到2的53次方的整数,也可以表示为政府1.7976的10的308次方的最大值和政府2.2250乘以10的-308次方的浮点数。
- 十进制数
如:12,1.2,-23,.222e33,-1.3e3,3.E-2,12e+20。 - 十六进制数
如:0x0,0XABCDEF,0x1a2b3c4d。 - 八进制数
如:00,0123,0241234. - 特殊值
如:infinity无穷大(-1.79e309——1.79e309以外的数值会显示infinity或-infinity),NaN(代表not a number。当一个undefined表达式的结果为数值型数据是,该数值型就是NaN值,NaN是唯一一个不能和自身作比较的值。可以通过isNaN()检测值是否为NaN。)
字符串型
字符串型必须写在定界符之中,定界符为单引号和双引号。
转义符:
'代表单引号本身,"代表双引号本身,\n代表回车换行,\r代表换行,\t代表制表符。
特殊数据类型
无定义数据类型
undefined用来表示不存在的值或者尚未赋值的变量,对一个变量只声明不赋值或者赋予一个不存在的属性值,都会使这个变量的值为undefined。
空值NULL
null百世空值,表示什么都没有,相当于一个占位符。
null和undefined的区别就是undefined表示变量未被赋值,而null表示变量被赋予了一个空值。(null与undefined值相等但类型不同)
类型转换
隐式转换
1.转换成布尔类型
undefined->false | null->false | 数值型0或0.0或NaN->false | 字符串长度为0->false | 其他对象->true.
2.转换成数值型类型
undefined->NaN | null->0,true->1 | false->0 | 内容为数字->数字否则转换成NaN | 其他对象->NaN.
3.转换成字符串类型
undefined->“undefined” | null->“null” | true->“true” | false->“false” | 数值型->NaN、0或者与数值对应的字符串 | 其他对象->如果存在这个对象则转换为toString()方法的值 | 否则转换成undefined
强制转换
-
通过Boolean函数强制转换成布尔值
0、-0->false
NaN->false
空字符串->false
undefined->false
null->false -
(1) 通过String函数转换成字符串
数值->数值本身
字符串->字符串本身
true->“true” , false->“false”
undefined->“undefined”
null->“null”
(2) 通过toString函数转换成字符串型 -
通过Number函数强制转换成数值
数值->转换成原来的值
字符串->如果可以解析为数值,则转换成数值,否则转换成NaN或0
true->1,false->0
undefined->NaN
null->0 -
通过parseInt(string,radix):返回转换成整数的值
(1)当参数radix的值为0时,或者没有设置这个参数,parseInt()会根据 string来判断数字的基数。
(2)当忽略radix,JavaScript默认数字的基数规则为:
2.1 string以0x开头,parseInt()会把string的其余部分解析为十六进制的整数
2.2 如果string以0开头,那么ECMAScript v3允许parseInt()的一个实现把其后的字符解析为八进制或十六进制的数。
2.3 如果string以1~9的数字开头,parseInt()将把它解析为十进制的整数
2.4 字符串如果以合法字符开始,截取合法字符
2.5 开头和结尾的空格是允许的
2.6 如果字符串的第一个字符不能被转换成数字,parseInt()会返回NaN
2.7 在字符串以“0”为开始时旧的浏览器默认使用八进制基数,ECMAScript 5,默认的是十进制的基数 -
通过parseFloat(string):返回转换成浮点型的值
该函数指定字符串中的首个字符是否是数字,如果是,则对字符串进行解析,直到到达数字的末端为止,然后以数字返回该数字,而不是作为字符串
注意:Number函数将字符串转换为数值比parseInt函数严格,,基本上只要有一个字符无法转换成数值,整个字符串就会被转换成NaN。
运算符与表达式
表达式是用于JavaScript脚本运行时进行计算的式子,可以包含常量、变量、运算符。
运算符
算数运算符
+、-、*、/、%、++、–。
++、–分为前缀形式和后缀形式:前缀形式先加减1再执行,后缀形式先执行再加减1。(undefined、字符串型不支持自增自减运算符)
注意:+号用来连接两个字符串,只要+连接的操作数中有一个是字符串型,Js就会自动把非字符串型数据作为字符串型数据来处 理。Js代码的执行顺序是从左到右,所以在+连接的表达式中,遇到字符串型数据之前,所有出现的数值型数据(或者可以自动转换为数值型的数据)仍被作为数值来处理。为了避免这种情况我们可以在表达式前拼接一个空字符串。
字符连接符
通过+连接字符串
赋值运算符
=、+=、-=、*=、/=、%=。
比较运算符
>、 >=、 <、 <=、 ==、 !=、 ===、 !==
注意:比较运算符的结果为布尔类型,== 只比较值是否相等, === 比较值和类型
逻辑运算符
&&、||、!
注意:逻辑运算符的结果为布尔类型,&&如果第一个表达式为false造成短路,||如果第一个表达式true,造成短路。
短路:第二个表达式不执行!!!
三元运算符
exp1?exp2:exp3 (exp为表达式)
若exp1的值为真,则执行exp2,否则执行exp3.
其他运算符
逗号运算符:逗号用来将逗号表达式连接为一个表达式,新表达式的值为最后一个表达式的值,多用在变量声明处。
void运算符:void运算符用来指明一个表达式无返回结果
typeof运算符:typeof运算符用来返回一个字符串,返回的是操作数的数据类型。(null返回的类型是object)
流程控制
条件语句
- if(exp)执行一句代码
- if(exp){执行代码段}
- if(exp){exp为true执行代码段}else{exp为false执行代码段}
- if…elseif…||switch…case
- if嵌套
循环语句
- for循环
- while循环
- do…while循环
特殊循环控制
break终止循环
continue跳过当次循环,进行下一次循环
函数
什么是函数
函数是完成某一功能的代码段
函数是可以重复执行的代码段
函数方便管理和维护
自定义函数
通过function关键字
function 函数名称([参数,…]){代码段;return 返回值;}
- 函数名称不要包含特殊字符
- 函数名称最好含义明确
- 函数名称最好遵循驼峰标记法或下划线法
- 函数名称严格区分大小写
- 函数名称如果重复会发生覆盖
- 函数可以由参数也可以没有参数,可以由一个参数也可以有多个参数
- 函数通过return加返回值,如果没有return默认返回undefined
- 函数不调用不执行
匿名函数
- 函数表达式可以存储在变量中,变量也可以作为一个函数使用
- 可以将匿名函数作为参数传递给其他函数,接收方函数就可以通过所传递进来的函数完成某些功能
- 可以通过匿名函数来执行某些一次性的任务
通过Function()构造函数
通过JavaScript函数构造器(Function())定义
- var myFunction=new Function(‘a’,‘b’,‘return a+b;’)
- var myFunction=function(a,b){return a+b;}
注意:以上两种方式是等价的,尽量避免使用new关键字
调用函数
作为一个函数调用
通过函数名称()进行调用,如果有参数传递相应参数即可。
在HTML中默认的全局对象是HTML页面本身,所以函数是属于HTML页面。在浏览器中的页面对象是浏览器窗口(window对象),所以函数会自动变为window对象的函数,也可以通过window.函数名称()进行调用
全局对象
当函数没有被自身的对象调用时,this的值就会变成全局对象。在web浏览器中全局对象是浏览器窗口window对象。
函数作为全局对象调用,会使this的值称为全局对象,使用window对象作为一个变量容易造成程序崩溃。
函数作为方法调用
可以将函数定义为对象的方法进行调用
使用构造函数调用函数
如果在函数调用前使用了new关键字,则调用了构造函数
作为回调函数调用函数
call(函数,参数)
apply(函数,参数数组)
参数
- 函数可以由参数也可以没有参数,如果定义了参数,在调用函数时没有传值,默认设置为undefined
- 在调用函数时如果传递参数超过了定义时参数,js会忽略掉多余参数
- js中不能直接写默认值,可以通过arguments对象来实现默认值效果
- 可以通过arguments对象实现可变参数的函数
- 通过值传递参数在函数体内对变量做修改不会影响变量本身
- 通过对象传递参数在函数体内对变量做更改会影响变量本身
变量的作用域
局部变量
在函数体内声明的变量,尽在函数体内可以使用
全局变量
函数体外声明的变量,在变量声明开始到脚本结束都可以使用
注意:尽量控制全局变量的数量,容易引发bug。最好总是使用var语句来声明变量。
- parseInt(string,remix):返回转换成数值型的值
- parseFloat(string):返回转换成浮点型的值
- isFinite(value):检测某个值是否是无穷值(若value是NaN或+inFinity或-inFinity则返回false)
- isNaN(value):检测某个值是否是非数字值(NaN)
- encodeURL(url):将字符串编码成URL
- decodeURL(url):解码某个编码的URL
- encodeURLComponent(url):将字符串编码为URL组件
- decodeURLComponent():解码一个编码的URL组件
- escape():对字符串进行编码
- unescape():解码由escape()编码的字符串
- eval():将JavaScript字符串当作脚本来执行
- Number(object):把对象的值转化为数字
- String():把对象的值转换为字符串