一、在html中使用js
<script>
- 六个属性
- async (async = “async”)异步加载页面内容。(仅适用于外部脚本)
同标记此的脚本并不能保证其先后顺序 - defer (defer = “defer”)立即下载,延迟执行。
脚本延迟到文档完全被解析和显示之后再执行(w3c标准:只对外部脚本有效) - src
- type
- async (async = “async”)异步加载页面内容。(仅适用于外部脚本)
- 包含在此元素内部的代码将从上至下依次解释。在此元素内部代码求值完毕以前,页面内其余内容都不会被浏览器加载或显示。在解析外部脚本时,页面的处理也会暂停。
- 不可在内部代码中出现“</script>”应通过转义字符
- 在XHTML中:由于编写的规则更加严格,不可出现小于号等,为避免:
- 用相应的HTML实体代替代码(如<代替<)
- 用一个CData片段来包含JS代码(<![CDATA[...]]>)
注:当js为外部文件时,不需要如此,此时HTML与XHTML的语法是相同的
<noscript>
此元素可包含除了<script>外的能够出现在body中的任何HTML元素。其中内容在浏览器不支持脚本或浏览器支持脚本但脚本被禁用时显示。
二、基本概念
(一)语法
- 区分大小写 eg.C\C++\JAVA 但HTML和css不区分大小写
- 标识符:由字母、数字、下划线、美元符组成,但不可以数字开头(与Java相同,比C多了美元符)
- 注释:(Java、C相同)
- //
- /*
注释内容
*/ (css)
- 严格模式:在脚本顶部(整个脚本启用)/函数内部上方(函数启用)添加:“use strict”;
- 使用了关键字做标识符,会导致“Identifier Expected”错误
(二)变量
- 松散类型:可保存任何类型的数据
- var操作符定义的变量将成为该变量的作用域中的局部变量
- 一条语句定义多个变量:用逗号隔开
(三)数据类型
5种基本数据类型:Undefined\Null\Boolean\Number\String
1种复杂数据类型:Object
-
Undefined:undefined 未初始化
未声明的变量只可进行typeof操作,而未声明和未初始化的typeof值都是undefined -
Null:null 空对象指针
当要保存为对象的变量还没保存时,最好设为null
注:alert(null == undefined) //true -
Boolean: true/false 不一定为1或0
各类型转化为布尔型:
类型 | true | false |
---|---|---|
String | 非空字符串 | " " |
Number | 非零数字值 | 0和NaN |
Object | 任何对象 | null |
Undefined | 不适用 | undefined |
-
Number : 十进制 八进制 十六进制
- 不要测试某个特定的浮点数值
- 最大的数:Number.MAX_VALUE
- 最小的数:Number.MIN_VALUE
- isFinite()函数:确定一个数值是否有穷
- Number.NEGATIVE_INFINITY : -Infinity
- Number.POSITIVE_INFINITY : Infinity
- NaN : 非数值,任何涉及NaN操作都会返回NaN
- 与任何值都不相等,包括NaN本身
- isNaN():判断能否转换为数值,如“10”可转换为数值10,布尔值true可转换为数值1;也适用于对象,会先调用valueOf(),还不能返回数值再调用toString()方法,再测试返回值。
- 数值转换
- number() : 适用于任何数据类型
如果是对象:会先调用valueOf(),如果结果是NaN,再调用toString()方法,再测试返回值。 - parseInt() : 将字符串转换为数值
- 从第一个非空格开始,如果不是数字字符或负号,返回NaN,如果是,解析后续字符直到遇到非数字字符。因此,对空字符返回NaN。
- 为避免分歧,为其提供第二个参数指定进制,2/8/10/16
- parseFloat() : 与parseInt类似,但只解析十进制,且始终忽略前导零,只有第一个小数点有效,遇到整数时返回整数。
- number() : 适用于任何数据类型
- 不要测试某个特定的浮点数值
-
String
- 一旦创建就不可变
- 转换为字符串
- toString() :null,underfined不可用,用于数值时,可传递一个参数:输出数值的基数
- String() : 当toString不可用时可以使用,将null转为"null",underfined转为"underfined"
-
Object
每个实例都具有下列的属性和方法- constructor
- hasOwnProperty(propertyName)
- isPrototypeOf(object)
- propertyIsEnumerable(propertyName)
- toLocaleString()
- toString()
- valueOf()
检测变量的数据类型:typeof操作符
- “undefined”——当此值未定义
- “boolean”
- “string”
- “number”
- "object"——当此值为对象或null
- “function”——当此值为函数
(四)部分操作符
1、逻辑与(&&)
- 如果第一个操作数是对象,则返回第二个操作数;
- 如果第二个操作数是对象,则只有在第一个操作数的求值结果为true时才返回该对象;
- 如果两个操作数都是对象,返回第二个操作数;
- 如果有一个操作数是null,则返回null;
- 如果有一个操作数是NaN,则返回NaN;
- 如果有一个操作数是undefined,则返回undefined;
2、逻辑或(||)
- 如果第一个操作数是对象,则返回第一个操作数;
- 如果第一个操作数的求值结果为false,则返回第二个操作数;
- 如果两个操作数都是对象,返回第一个操作数;
- 如果两个操作数都是null,则返回null;
- 如果两个操作数都是NaN,则返回NaN;
- 如果两个操作数都是undefined,则返回undefined;
注意:逻辑与逻辑或都是短路操作
3、乘法
- 如果乘积超过了ECMAScript数值表示范围,返回Infinity或-Infinity;
- 如果有一个操作数是NaN,则结果是NaN;
- 如果是Infinity与0相乘,则结果是NaN;
- 如果Infinity与非0数值相乘,结果是Infinity或-Infinity;
- 如果Infinity与Infinity相乘,结果是Infinity;
- 如果有一个操作数不是数值,则在后台调用Nunber()将其转换为数值在应用如上规则;
4、除法
- 如果商超过了ECMAScript数值表示范围,返回Infinity或-Infinity;
- 如果有一个操作数是NaN,则结果是NaN;
- 如果Infinity被Infinity除,则结果是NaN;
- 如果0被0除,则结果是NaN;
- 如果非0的有限数被0除,则结果是Infinity或-Infinity;
- 如果Infinity被任何非0数值除,则结果是Infinity或-Infinity;
5、求模
- 无穷大值 % 有限大值 = NaN;
- 有限大值 % 0 = NaN;
- Infinity % Infinity = NaN;
- 有限大值 % 无穷大值 = 被除数;
- 如果被除数为0,则结果为0;
- 如果有一个操作数不是数值,则在后台调用Nunber()将其转换为数值在应用如上规则;
6、数值加法
- Infinity加-Infinity,则结果是NaN;
- +0加-0,则结果是+0;
7、数值减法
- Infinity减Infinity,则结果是NaN;
- -Infinity减-Infinity,则结果是NaN;
- +0减+0,则结果是+0;
- +0减-0,则结果是-0;
- -0减-0,则结果是+0;
- 如果有一个操作数是字符串、布尔值、null、undefined,则先在后台调用Number()再应用如上规则;
- 如果有一个操作数是对象,则调用ValueOf()方法取得表示该对象的数值。如果对象没有该方法,则调用toString()方法;
8、相等操作符 先转换再比较
- 如果有一个操作数为布尔值,比较前先转换为数值0/1;
- 如果操作数是字符串和数值,则比较前将字符串转换为数值;
- 如果一个操作数是对象而另一个不是,则调用对象的valueOf()方法再按照规则比较;
- null与undefined相等,且比较相等性之前,不能将二者转换为其他任何值;
- 只要有一个操作数为NaN,则返回NaN;
- 如果两个操作数是对象则比较是否为同一对象;