一JavaScript认识
JavaScript是弱类型语言,弱类型不是没有类型,而是类型之间可以自动去转换,当然你可能会说java数值型也可以自动转换,为什么java就是强类型,而js就是弱类型。js可以不同类型之间进行转换,它的转换可以是需要的时候自动转换或者开发者主动转换。
html文档解析顺序是从上到下,JavaScript代码作为通过标签嵌入或引入的脚本,也是HTML文档的组成部分。因此,JavaScript代码载入顺序根据脚本标签<script>的出现顺序来确定的。并且浏览器在加载js时有个特点,那就是载入之后立即就会执行,js的载入会阻塞DOC的建立。
当然这也会带来问题:由于JavaScript通常需要操作DOM,所以,一般把JavaScript放在</body>前或者文档结尾处引入。若需要在<head>中引入,可以通过修改window.onload或者document.ready事件,强制等到DOM加载完成后再执行相关函数。
并且JavaScript执行也是有特殊的顺序:先处理声明后执行。比如代码:
var a = 1;
function aa() {
}会先处理声明:
var a = undefined;
var aa = {};
执行:
var a = 1;
方法调用时候才执行。
关于JS阻塞DOM建立可以查看文章segmentfault.com/a/119000001…
二js数据类型
在JS中一共有六种数据类型:
基本数据类型(值类型):String 字符串、Number 数值、Boolean 布尔值、Null 空值、Undefined 未定义。
引用数据类型(引用类型):Object 对象。
数据类型之间最大的区别:
基本数据类型:参数赋值的时候,传数值。
引用数据类型:参数赋值的时候,传地址(修改的同一片内存空间)。
tips:不是数字的数字类型NaN。
null专门用来表示空对象。类型是object。
undefined用来表示一个未定义的变量,类型是undefined。
三数据之间转换
其他类型转字符串:
- 变量+"abc"
- 变量.toString()
- String(变量)
其他类型转数字:
- Number(变量)
- parseInt(变量)
特殊情况:
如果字符串中有非数字的内容,则转换为NaN;
如果字符串是一个空串或者是一个全是空格的字符串,则转换为0;
如果是true 转成 1,如果是false转换成0;
如果是null转换成0;
如果是undefined转换层NaN;
tips:parseInt(变量)返回整数,还有parseFloat(变量)返回浮动数
其他类型转Boolean:
如果是字符串转boolean:除了空字符串,其余的全部转换成true;
如果是数字转boolean:除了0和NaN,其余的全部转换成true;
如果是null转boolean:转换成false;
如果是undefined转boolean:转换成false;
如果是对象转boolean;转换成true;
tips:浏览器会根据当前的类型自动去转换成需要的类型,比如 if(object),他会把他转换成boolean再去执行,而不是像强类型报错。
四运算符
运算符都是会返回结果的。运算符可以去分类记忆:算数运算符、自增运算符、逻辑运算符、赋值运算符、关系运算符、三元运算符(条件运算符)
算数运算符规则:
非number与数字进行计算时候都会先转换成数字,在进行运算(任何数和NaN计算结果都是NaN),其余和java一样。
自增运算符规则:
和java一样,不再赘述。
逻辑运算符规则:
如果对非布尔值进行逻辑运算,则会先将其转换为布尔值,然后再操作。其余的和java一样。
赋值运算符规则:
和java一样,不再赘述。
关系运算符规则:
- 如对于非数值进行比较时,会将其转换为数字然后再比较(任何数和NaN比较都是false)。
- ==会自动类型转换后在比较,而===不会类型转换而比较。
- NaN不等于任何值,包括它本身,可用isNaN(值)去判断。
三元运算符:
如果条件的表达式的求值结果是一个非布尔值,会将其转换为布尔值然后再运算,其余的和java一样。
五控制语句
if语句、switch语句、for语句、while语句语法和java一样,不在赘述。