@llqintel
2014-11-26T16:08:48.000000Z
字数 2090
阅读 1312
js基础
js误区
周分享
基本类型: Undefined
Null
Boolean
Number
String
.
复杂类型: Object
布兰登·艾奇(Brendan Eich):
java(对Javascript)的影响,主要是把数据分成基本类型(primitive) 和对象类型(object)两种,比如
字符串
和字符串对象
,以及引入了Y2K
问题。这真是不幸啊。
值类型
引用类型
赋值
复制
以下注意点
undefined
与null
java中只有null,表示空对象
常见:空指针异常
javascript
a. undefined表示一个对象没有被定义或者没有被初始化;
b. 对象属性值不存在,返回undefined;
var obj={x: 5};
console.log(obj.y);
c. 函数没有返回值,则默认返回undefined
var f = function(x){x.id+=1;}
console.log(f);
d. null表示空对象指针,可以用来清除对象(设为空值)
e. 区别:undefined侧重于意料之外的,类似错误的值的空缺;null侧重正 常的,意料之中的值的空缺。
应用:手动为变量赋值或者作为参数传入函数,最佳选择是null.
var list = null,
fun = function(param){...};
fun(null);
其他理解:
Javascript的10个设计缺陷之一。
两者非常容易混淆,但是含义完全不同。
var foo;
alert(foo == null);
alert(foo == undefined);
alert(foo === null);
alert(foo === undefined);
在编程实践中,null几乎没用,根本不应该设计它。
NaN
表示非数字值
not a number的缩写,但实际上就是特殊的number
有一些奇怪的特性:
'sss'==NaN;//?
'sss'!=NaN;//?
1+NaN;
Javascript的10个设计缺陷之一。
与其设计NaN,不如解释器直接报错,反而有利于简化程序。
Infinity
-Infinity
弱类型
//1.没有明显的类型
var s = null;
s = new Date();
s = 222; //不推荐,容易造成混乱
//2.随着环境自动变换类型
'a' + 1;
'1' + '1';
1 + '1';
'1' + 1;
强类型
//1.指定变量类型
int x1 = 111;
long y1 = x1;
//2.相同类型才能运算
String str = 1234 + "ccccc";
总结:弱类型代码简单,但因为变量没有确定的类型,所以容易出错!强类型代码复杂,但因为有严格定义所以不容易出错
java:
向上转型
short s = 1;
s = s + 1;//error?
子对象可隐式转为父对象【函数传参】,反之需要强转
js
== === != !== ![布尔操作符] if while
tip:尽可能使用=== !==(精确,严谨)
4.值类型与引用类型(赋值与复制)(指针)(浅复制与深复制) [与java类似]
两种语言都有&&
||
等
相同点:
&& 执行布尔与(AND)操作,左右两个操作数都为true时才返回true;||一样
&&优先级高于||;
都具备短路的功能(区分于&和|);
不同点(js逻辑表达式的多层理解及使用技巧):
在js中除了false、null、undefined、0、-0、NaN、'',其他值包含对象都可以转为true。在js中任何希望使用布尔值的地方,表达式都会将其当做true或false对待,因此实际上"&&"并不总是返回true或false(操作数也可以非布尔值),但并无大碍。
&&: 如果两个操作数都为真,那么返回一个真值;反之,返回一个假值
加之短路特性,有一些小技巧可以使用:
var name = obj&&obj.name,
ej = ej||'初始值';
监听事件的函数中:
ev = event||window.event
var a = null,i=2;
-----------------------------------------------
if(i===1) a = '上架';
else if(i===2) a = '下架';
else if(i==3) a = '成交';
---------------------等价变换-------------------
a = ((i===1)&&'上架')||((i===2)&&'下架')||((i===3)&&'成交');
tip:可以与三元运算符组合使用,使代码更简洁。但要合理选用,过长的表达式可能会降低了代码的阅读性。
先进行一个简单的运算
0.3-0.2=?
参考资料
[1] []