[关闭]
@llqintel 2014-11-26T16:08:48.000000Z 字数 2090 阅读 1312

javscript必须清楚的几点

js基础 js误区 周分享



1. 数据类型

基本类型: Undefined Null Boolean Number String.
复杂类型: Object

布兰登·艾奇(Brendan Eich):

java(对Javascript)的影响,主要是把数据分成基本类型(primitive) 和对象类型(object)两种,比如字符串字符串对象,以及引入了Y2K问题。这真是不幸啊。

值类型 引用类型 赋值 复制

以下注意点

1. undefinednull

  1. java中只有null,表示空对象
  2. 常见:空指针异常
  1. javascript
  2. a. undefined表示一个对象没有被定义或者没有被初始化;
  3. b. 对象属性值不存在,返回undefined;
  4. var obj={x: 5};
  5. console.log(obj.y);
  6. c. 函数没有返回值,则默认返回undefined
  7. var f = function(x){x.id+=1;}
  8. console.log(f);
  9. d. null表示空对象指针,可以用来清除对象(设为空值)
  10. e. 区别:undefined侧重于意料之外的,类似错误的值的空缺;null侧重正 常的,意料之中的值的空缺。
  11. 应用:手动为变量赋值或者作为参数传入函数,最佳选择是null.
  12. var list = null,
  13. fun = function(param){...};
  14. fun(null);
  1. 其他理解:
  2. Javascript10个设计缺陷之一。
  3. 两者非常容易混淆,但是含义完全不同。
  4. var foo;
  5. alert(foo == null);
  6. alert(foo == undefined);
  7. alert(foo === null);
  8. alert(foo === undefined);
  9. 在编程实践中,null几乎没用,根本不应该设计它。

2. js中其他几个特殊的值

NaN 表示非数字值

  1. not a number的缩写,但实际上就是特殊的number
  2. 有一些奇怪的特性:
  3. 'sss'==NaN;//?
  4. 'sss'!=NaN;//?
  5. 1+NaN;
  6. Javascript10个设计缺陷之一。
  7. 与其设计NaN,不如解释器直接报错,反而有利于简化程序。

Infinity -Infinity

3. 隐式转换

弱类型

  1. //1.没有明显的类型
  2. var s = null;
  3. s = new Date();
  4. s = 222; //不推荐,容易造成混乱
  5. //2.随着环境自动变换类型
  6. 'a' + 1;
  7. '1' + '1';
  8. 1 + '1';
  9. '1' + 1;

强类型

  1. //1.指定变量类型
  2. int x1 = 111;
  3. long y1 = x1;
  4. //2.相同类型才能运算
  5. String str = 1234 + "ccccc";

总结:弱类型代码简单,但因为变量没有确定的类型,所以容易出错!强类型代码复杂,但因为有严格定义所以不容易出错

  1. java:
  2. 向上转型
  3. short s = 1;
  4. s = s + 1;//error?
  5. 子对象可隐式转为父对象【函数传参】,反之需要强转
  1. js
  2. == === != !== ![布尔操作符] if while

tip:尽可能使用=== !==(精确,严谨)

4.值类型与引用类型(赋值与复制)(指针)(浅复制与深复制) [与java类似]

2. 逻辑表达式

两种语言都有&& ||
相同点:

  1. && 执行布尔与(AND)操作,左右两个操作数都为true时才返回true;||一样
  2. &&优先级高于||;
  3. 都具备短路的功能(区分于&和|);

不同点(js逻辑表达式的多层理解及使用技巧):

  1. js中除了falsenullundefined0、-0NaN'',其他值包含对象都可以转为true。在js中任何希望使用布尔值的地方,表达式都会将其当做truefalse对待,因此实际上"&&"并不总是返回truefalse(操作数也可以非布尔值),但并无大碍。
  2. &&: 如果两个操作数都为真,那么返回一个真值;反之,返回一个假值
  3. 加之短路特性,有一些小技巧可以使用:
  4. var name = obj&&obj.name,
  5. ej = ej||'初始值';
  6. 监听事件的函数中:
  7. ev = event||window.event
  8. var a = null,i=2;
  9. -----------------------------------------------
  10. if(i===1) a = '上架';
  11. else if(i===2) a = '下架';
  12. else if(i==3) a = '成交';
  13. ---------------------等价变换-------------------
  14. a = ((i===1)&&'上架')||((i===2)&&'下架')||((i===3)&&'成交');

tip:可以与三元运算符组合使用,使代码更简洁。但要合理选用,过长的表达式可能会降低了代码的阅读性。

3. 数值计算

先进行一个简单的运算
0.3-0.2=?

4. 讲讲this

5. js中的function

function作为参数

6. 作用域与闭包

7. 异步调用与多线程

参考资料
[1] []

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注