Javascript s02
s02
1.包装对象
在调用基本数据类型的变量的方法或属性时,JS会自动将该变量包装成对象
每一种数据类型都有他的构造函数调
用完后,又变回原来的样子.
属性为只读的,不改变原始对象的值
普通对象上调用方法,则有可能会改变原始变量的值
null 和 undefined 没有包装对象
2.对象的比较,值传递与引用传递
JS的'=='和PHP的'==='一样
在JS中,如果new出来的两个对象,属性相等,用==去比较,是false.
值传递
string number boolean null undefined
引用传递
object function array
数组也是object
3.数据类型的转换
Number() :将传入的内容转为整数或小数,只能进行10进制的转换,不能出现非法尾字符
parseInt() :将传入的内容转为整数.
以0x开头的parseInt(),将按16进制的解析.
parseFloat() :
前导空格,都会自动丢掉
数据类型转换
======================================================================================
转为字符串 数字 布尔值 对象
undefined "undefined" NaN false throws TypeError
null "null" 0 false throws TypeError
--------------------------------------------------------------------------------
true "true" 1 new Boolean(true)
false "false" 0 new Boolean(false)
--------------------------------------------------------------------------------
"" 空字符串 0 false new String("")
"1.2" 数字字符串 1.2 true new String("1.2")
"one" NaN true new String("one")
--------------------------------------------------------------------------------
0 "0" false new Number(0)
-0 "0" false new Number(-0)
NaN "NaN" false new Number(NaN)
Infinity "Infinity" true new Number(Infinity)
-Infinity "-Infinity" true new Number(-Infinity)
1 非0正数 "1" true new Number(1)
-1 非0负数 "-1" true new Number(-1)
--------------------------------------------------------------------------------
{}任意对象 注1 注1 true
[]空数组 "" 0 true
[9]单元素数组 "9" 9 true
[1,2] 注2 NaN true
["a"] 注2 NaN true
function(){} 注1 NaN true
3.运算符
一元运算符
++ -- + - ~ ! delete typeof void
----------------------------------------
二元运算符
* / %
+ -
+ 字符串连接符
-----------------------------------------
<<
>>
>>>
------------------------------------------
> < >= <=
instanceof
in
------------------------------------------
==
!=
===
!==
-------------------------------------------
&
^
|
&&
||
?:
--------------------------------------------
=
+= -= *= /= &=
^= |= <<= >>= >>>=
--------------------------------------------
,
--------------------------------------------
a.字符串连接与加法运算
只有两个数相加,结果才是数
任何东西与字符串相加,结果就是字符串,字符串优先
对象如何转为普通值
b.调用 valueOf() 或 toString()方法;
c.运算符的结合性
1. +号是从左往右运算
alert(1+2+'3'); //string 33
因为是二元运算符
2. =赋值运算,从右往左
var i=j=7; //结果全是7
3. 一元,三元运算符是从右往左
var a=ture;
var b=ture;
var c=fales;
var x=a?b:c?false:2; //从右往左
4.自增运算
变量的自增或自减,不是整个表达式结束后,才发生,而是使用一次,就自增(自减);
5.NaN特殊的数
自己不等于自己的
if(a!=a){}
isNaN()
6.boolean
if(true=1) //true
if(true=2) //false
会把boolean值转为数字
7.delete //php中的unset
8.in
9.instanceof
var arr=new Array();
alert(arr instanceof Object); //true 数组是对象的实例
10. 逗号运算符
从左往右运算
var j=1;
for(var i=0;i<3;j=i,i++){
document.write(j);
}
输出 101;
11. ~ 按为非 按为非
//10进制的5,二进制是多少 101
10进制的-6转化为内存的二进制是多少
源码
10000000 00000000 00000000 00000110
反码
11111111 11111111 11111111 11111001
补码 反码+1
11111111 11111111 11111111 11111010
4.语言结构
if(){}eles{}
switch(){} 要注意,里面case用的是===来判断的
while(){}
do while()
for
**for...in... in foreach 只有key没有value 数组就是下标,对象就是属性
//数组就是下标
var arr=[4,6,78];
for(var i in arr){
document.write(i); //相当与php $key
document.write(arr[i]) //相当与php $value
}
//对象就是属性
var obj={name:'张三',age:18};
for(var j in obj){
//document.write(obj.j);
document.write(j); //只能拿到属性名
}
尽量少用for...in...
要求用for循环遍历数组
5.try ...catch ...finally
finally中的代码始终被执行
function test(){
try{
6.
只有索引数组,下标是整数的,没有php类似的关联数组
[] 空数组
[,,] 几个成员?2个
[1,,11] 几个?3个
new Array();
new Array(5); 这是什么意思?每个成员的值都是unidefined;
new Array(4,5,6); 这是什么意思,代表数组有三个成员,值分别是4,5,6,下标分别是0,1,2;
没有下标越界,访问不存在的下标,将得到undefined
var arr=[2,4];
arr['a']=5;
alert(arr.length); //2
document.write(arr.a); //变成对象的普通属性了
document.write(arr['a']);
arr['12']=6; 会转化为整数,和php一样
arr[7.0]=6; 会转化为整数,和php一样
arr['7.0']=6; 字符串的
arr[7.4]=6; 变成字符串的
在最后加一个成员
arr[arr.length]=值
arr.push(值);
不支持多维数组,但是值就是一个数组