1. var定义的变量
var定义的变量是其作用域内的局部变量,例如一个函数内部定义的变量,出了函数就不可使用了.
var message ; 未进行初始化的变量, 会保存一个特殊的值 undefined.
省略var直接使用的变量, 则表示为全局变量, 不推荐这种定义类型, 会造成混乱.
var name = "kevin" ,
age = 10 ,
birth = "19090202" ;
此时, 中间的符号要用 , 而不是 ;
2.数据类型
5种简单的数据类型 Undefined Boolean , Number , String . function
1种复杂的数据类型 Object
不支持自己创建数据类型 . ( 以上 6 种就是类型的全部 ) function 也算是一种类型 , 尽量声明时就初始化, var message = "" ;
underdefined : var message 只是定义但是没初始化的话, 那么就是 underdefined 类型, ( 尽量定义时就初始化 )
null 值表示一个空对象指针. ( typeof(null)) 返回 object 类型.
如果打算将一个变量保存对象的内容, 则最好在初始化是直接使用Null , var car = null ; 这样在后边只要检查 null 值就知道相应的变量是否已经保存了一个对象的引用了,例如
if (car != null){
// 对 car 对象执行操作,
}
typeof 用来确定类型, 因为是松散的, 所以需要 typeof
alert( typeof 95 ) ; 显示的是 Number .
Boolean 只有2中情况 , true false 注意是区分大小写的 , 并且 1 并不等于 true, 要使用 boolean( 1) 来进行转换成 boolean类型
Null 只针对对象类型的
Number : var nu = 12 ; //10进制
var nu = 07 ; // 八进制
var nu = 091 ; // 由于超过了 8 , 所以变成, 前边0无效, 后边91为10进制数
var nu = 0xA ; //十六进制 , 超过后,不符合规则同上
var nu = 0.1 ; // 浮点数必须要有小数点 .
不要进行小数的比较, 例如 0.1 + 0.2 不等于 0.3 所以
a = 0.1 ;
b = 0.2 ;
if ( a+b == 0.3 ) 这个判断是不通过的
( 如果数太大则自动转成 infinity , 太小 -infinity ( 正负无穷 ) )
NaN : 非数值 not a number , 是指当计算时得出非法内容时, 则返回 NaN 类型, 例如 当除数为 0 时, 返回的结果就是 NaN 类型. 任何与 NaN类型操作的结果都是 NaN, 2个NaN也不相等 . 判断 NaN == NaN 是错误的 .
isNaN( NaN ) // 返回 true
isNaN(100) // 返回 false 因为可以转换成数字
isNaN("blue") // 返回 true , 不能转换成数字
isNaN(true) // 返回 false , 转换成 1
数值转换 : Number() , parseInt() , parseFloat()
Number() ; 如果是 boolean类型, 则 true = 1 , false = 0
如果是 null , 则返回 0
如果是 undefined , 则返回 NaN
如果是字符串 : ( 只是数字 , 转换成数字 , 空的转换成 0 , 包含其他字母 转换成 NaN )
parseInt() , parseFloat() 只是针对 字符串类型进行处理, 相对比 Number()更合理一些.
String 类型 : \n 换行 , \b 空格 , \t 制表 , \r 回车 toString() 方法 , String() 方法 --双引号和单引号没什么区别.
Object 类型 : var o = new Object();
Object类型的属性和方法 :
constructor - 保存用于创建当前对象的函数 ( 构造函数 - Object() )
hasOwnProperty( propertyName ) - 用于检查给顶的属性在当前对象实例中( 而不是在实例的原型中) 是否存在.
isPropertyOf(object) - 用于检查传入对象是否是另一个对象的原型
propertyIsEnumerable( propertyName) - 用于检查给定的属性是否能够使用 for-in 语句.
toString() - 返回对象字符串表示
valueOf() - 返回对象的字符串,数值或布尔值表示, 通常与 toString()方法返回值相同.
3.操作符
位操作 : ~非 , &与 , |或 , ^异或 << 左移 >> 右移 >>>无符号右移
布尔操作 : ! 求反 , && 逻辑与, || 逻辑或
关系操作 : < <= > >= var result1 = 5 > 3 ( result1 返回 true )
== , != , === ,!== ( 最后是不全等, 如果两个不同类型的值进行比较, 则 !== 会不进行类型转换而直接比较 ) var result = ( "55" != 55 ) 这个会返回 false , 因为 转换类型后是相等的,但是如果是 var result = ( "55" !== 55) 会返回true , 因为没有发生类型转换 . 推荐使用 === , !== 全等和不全等操作符 .
条件操作 : var result = ( max1 > max2 ) ? number1 : number 2 ;
4.语句( 特殊 )
特殊 for 语句 :for( propertity in expression ) statement
label标签 : start : for( var i = 0; i < 10; i++) 将来这个lable 可以在 break 和 continue中使用
with 语句 : 不建议使用 .
5.函数
function functionName(arg0,arg1, ...... ){
statements
} 不同之处在与参数传递, 解析器不会判断你传递的参数是否正确,数量或数据类型都无所谓, 因为在函数内部有个arguments数组用来接收参数,并且可以在函数内部直接使用,例如直接使用arguments.length, 可以判断究竟传过来的实际参数是哪些.例如 ( 因为JavaScript中的数组可以存放不同类型的多个数据 )
function doAdd(){
if ( arguments.length == 1 ) {
alert( arguments[0] + 10 ) ;
} else if ( arguments.length == 2 ) {
alert( arguments[0] + arguments[1] );
}
}
doAdd( 10 ) ; // 结果 20
doAdd ( 30,20 ) // 结果 50
如上的不同之处 , 必定函数没有重载 .
6.JavaScript 获取元素
1). 通过元素ID document.getElementById( id )
2). 通过标签名字 document.getElementByName( "li" ) 此处的名字是指元素的名字, 而同一种元素有可能不只有一个, 比如<p> 段落这个元素,可能就有很多,此时是全部返回.
3). 通过类名字 document.getElementByClassName( class ) //新的方法, HTML5中可以使用, 返回的也是数组,
7. 语句
特殊的 label : 语句 ( 尽量不要使用 ) 例如 :
outcome :
for(var i=0; i<10;i++)
for(var j=0; j<10; j++)
if (j==5 & i==5)
continue outcome ;
特殊的 with 语句 : 不建议使用
8. 基本类型和引用类型的赋值
基本类型 :
var a = 5 ;
var b = a ;
此时, 会在栈中开辟一块新的内存地址, 用来保存变量 b 的内容, 此时的 a 和 b 是完全独立的内容.
引用类型 :
var obj1 = new Object();
var obj2 = new Obj1;
obj1.name = "Nicholas"
alert( obj2.name) ; // 此时输出的结果也是 Nicholas
因为 : 新的引用类型只是在栈中重新分类了个地址,保存了对象的指针, 即 obj1 这个指针变量( 所谓的引用类型)和 obj2这个指针变量(所谓的引用类型) 都指向了内存中的同一个堆地址. 所以 obj1.name 和 obj2.name 是一样的内容.
传递参数时, 跟 c 一样, 基本变量传递值, 引用类型也传递"值" , 但是这个值就不一样了, 是一个指针的值.
例如 :
function setName(obj){
obj.name = "Nicholas";
}
var person = new Object();
setName(person);
alert(person.name) // Nicholas ( 引用 即 指针, 多想指针 )