HTML中使用Javascript
<script>
元素
`
参数 | 解释 |
---|---|
async | 可选,立即下载,不妨碍其他操作,在load事件前执行,不保证顺序 |
charset | 指定代码字符集 |
defer | 延迟至文档完全被解析和显示后再执行,延迟脚本先于DOMContentLoaded |
language | 已废弃 |
src | 可选,外部js地址 |
type | 可选,类型text/javascript |
外部文件xhtml:<script type="text/javascript" src=""/>
<script type="text/javascript" src=""></script>
<noscript></noscript>中的内容只会在不支持脚本,支持但被禁止的浏览器中显示。
基本类型
ECMAScript有5种基本数据类型:Undefined,Null,Boolean,Number,String.
typeof 操作符
typeof返回字符串,主要用于中检测值类型- “undefined”—–如果这个值未定义
- “boolean”——如果这个值是布尔值
- “string”——如果这个值是字符串
- “number”—-如果这个值是数字
- “object”—–如果这个值是对像或null
- “function”——如果这个值是函数
Safari5以下,chrom7以下对正则表达式调用typeof时返回”function”,而其他浏览器返回”object”.
typeof 检查类型是,对变量未赋值和未声明变量都会返回“undefined”。Undefined类型
Undefined类型只有一个特殊的undefined值,使用var声明变量未赋值,默认undefined.
Null类型
Null类型只有一个特殊值null .null值表示一个空指针,因而typeof返回“object”。而undefined派生与null值,ECMA-262规定null和undefined相等测试返回True
Boolean类型
此类型有两个字面值:true和false. True和False不是布尔值,是标识符区分大小写。ECMAScript中所有类型都可以转换成Boolean值。
各种数据类型通过Boolean()函数转换成Boolean。规则如下:
数据类型 | 转换为true | 转换为false |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | “”空字符串 |
Number | 任何非0数字 | 0和NaN |
object | 任何对像 | null |
Undefined | n/a | undefined |
Number类型
使用IEEE745格式来表示整数和浮点数值。
整数
var intNumber = 50;//十进制 var intOrdNumber = 016;//八进制 var inthexNumber = 0x1A;//十六进制
浮点数
浮点数值最高精度17位小数,永远不要测定某个特定的浮点数值。
var floatNumber = 1.1;var floatnumber = 3.1415e7;//等效于31415000
数值范围
ECMAScript能够表示的最小数值Number.MIN_VALUE 最大值Number.MAX_VALUE 超出范围转成Infinity。判断数值是否超出范围isFinite()函数
NaN
即非数值(Not a Number)是个特殊值。表示一个本来要返回数值的操作数未返回数值的情况。例如:5/0 ;涉及NaN操作都返回NaN。NaN不等于任何值,包括本身。
isNaN()接受任意一个参数,会试图转换成Number类型,不能转换返回ture
数值转换
1. Number()接受任何类型参数 Boolean :tru和false分别转换为1和0 数字值:简单传入返回 null:0 undefined:NaN 字符串:只包含数字(符号)转换为十进制,忽略开头0 只包含浮点格式,转为浮点数 只包含有效 十六进制格式转换为大小相等的十进制 空字符串,转换为0 除此之外全为NaN object:调对像的valueOf()方法,依照前面规则,若结果为NaN,则调用对像的toString(),再次依照前面规则。 2. parseInt() 参数为字符串 空字符为NaN 只识别字符串中的数字忽略字符能识别进制数 ECMAScript3,5对于8进制存在差异,5不能解析8进制,应指定进制 parseInt("0x11",16); 3. parseFlaot() 用法和paseInt()一样,不过始终忽略开头的0
String类型
string和java的string类似,不可变,多个字符串连接,创建数组,通过.join()方法拼接。除null和undefined没有toString()方法,其他类型都有。toString()可指定进制数,将数字按相应进制输出。String()类型转换null输出"null" ,undefined输出“undefined”,其他和toString()一样。
Object
ECMAScript中的对象是一组数据和功能的集合。对象可通new操作符创建。
Object属性和方法
名称 作用 Constructor 构造函数 hasOwnProperty(propertyName) 判断属性在当前对像中是否存在 isPrototypeOf(object) 判断传入对象是否为另一个对象的原型 propertyIsEunmerable(propertyName) 判断属性是否能枚举 toLocaleString() 返回与环境对应的对像的字符串表示 toString 返回字符串表示 valueOf() 返回对像的字符串,数值,布尔值表示 操作符
大致和java中类似。 注意: 1. 进行运算符操作时会按照Number()规则转换成numner进行操作. 2. 任何对像,boolean测试始终为true. 3. 空字符串,boolean测试为false. 4. Infinity ,boolean测试为true. 5. null,undefined,NaN,boolean测试为false语句
语法和其他语言类似。for-in操作前应判断对像是否为null和undefined,不然抛错误,Safari3以前有BUG会导致某些属性被返回两次。label给代码添加标签一般和for配合使用。
注意:
- javascript没有块作用域。
- 开发中不要使用with会使性能下降。
- switch可接受任意类型,case可以是变量或表达式
- function类似其他语言中方法
- 没有重载
- 参数可以任意类型,调用可以传任意参数,ECMAScript中参数在内部是用类似Aarry的对象argument.通过length属性来判断参数个数,通过这个特性可以模拟类似重载。
变量,作用域和内存问题
5种基本类型都是按值引用的,对象引用类型。
ECMAScript中所有函数的参数都是按值传递的
在向参数传递基本类型的值时,被传递的值被复制给局部变量。在向参数传递引用类型的值时,会把其内存地址复制给局部变量,这个局部变量的变化会反映到函数外部。
function addTen(num){ num+=10; return num; } var count = 20; var result = addTen(count); alert(count);//20 alert(result);//30 function setName(obj){ obj.name="Jon" }; var person={}; person.name = 'Tome'; alert(person.name);//"Tome" setName(person); alert(person.name);//"Jon"
检查类型
typeof检查基本类型是得力助手,ECMAScript提供instanceof 检查引用类型的类型。其语法如下:reuslt = variable instanceof constructor
在safari5以下Chrome7以下typeof检查正则时返回”function”,IE和Firefox中返回“object”
ECMA-262规定任何内部实现[[call]]方法的对象都应该在应用typeof 时返回”function”
执行环境及作用域
执行环境 定义了变量或函数有权访问的其他数据,决定他们各自的行为。每个执行环境都有一个与之关联的变量对像(variable object),环境中定义的所有的变量和函数都保存在这个变量中。
每个环境都可以向上搜索作用链,以查询变量和函数名;但任何环境都不能向下搜索作用链而进入另一个执行环境。
try–catch;with可以延长作用链。