基本数据类型

简单数值类型: undefined, null, boolean, number和string,共有5种

复合数据类型:object,array,function

typeof操作符用来确定变量的基本数据类型,它只有六个可能的值:

undefined,boolean,string,number,object和function

也就是说,null和array经过typeof操作后得到的值为object

需要注意以下几点:

  1. 这几个类型的首字母必须小写,如果大写则变为了javascript的内置对象。javascript的内置对象有String,Math,Array,Date,Event等。内置对象都有自己的方法和属性
  2. null的意思是对象是空的,undefined的意思是未声明,或者已经声明但没有赋值,或者函数无明确的返回值。在进行数值运算时,null会转变为0,undefined会转变为NaN。关键在于null并不很特殊,从某种程度上和其他的值完全一样。
  3. 所有object都有一些方法,如hasOwnProperty,isPrototypeOf,toString和valueOf

双等号和三等号

我觉得这是一个很头疼的问题。在英文里,双等号叫做equality,三等号叫做identity,它们的区别在于双等号要做类型转换,但是三等号直接进行比较。这么说感觉很简单,但是实际比较起来就不那么容易了。

===比较时,若要相等,首先两边类型必须相同。然后又几种情况:都是number同值,都是字符串每个位置字符相等,都是true或者false,都引用同一对象或function,都是null或者undefined。

==比较时,如果类型相等转入===比较。如果类型不等而满足如下情况,则也算相等。null和undefined比较,字符串和数字比较(字符串转化为数字后两边相等),true和1或者false和0比较,对象和数值或字符串比较(对象调用valueOf或toString后和另一边相等)。说着挺麻烦的,举个例子吧:

true == 1       //true
"2" == 2 //true
false == undefined // false
false == null // false
null == undefined // true
' \t\r\n ' == 0 // true
0 == "" //true
var a = { x: 1, y: 2 };
var b = { x: 1, y: 2 };
a == b // false
a === b //false

总之一句话,尽量用三等号就行了,要不然会很头疼。

原型链

Javascript中的每一个function都有一个prototype属性,指向该function的原型对象。默认所有的原型对象都有constructor属性,它始终指向创建当前对象的构造函数。函数的prototype的constructor指向这个函数。

function Person(name) {
this.name = name;
};
Person.prototype.getName = function() {
return this.name;
};
var p = new Person("Mike");
p.constructor===Person //true,对象的constructor属性是创建它的构造函数
Person.prototype.construtor==Person //true,函数的prototype属性的constructor属性是它自己

new Person的过程是这样的:

  1. 初始化一个空的对象,var p={}
  2. p.__proto__=Person.prototype
  3. Person.call(p)

每个对象都有一个__proto__属性,它是一个私有属性,不对外公开,其实他就是构造它的函数的prototype属性。在寻找对象的属性时,首先找他自己的属性,没有的话向__proto__属性中找,如果还没有,就向__proto__.__proto__中去找,。。。这就是原型链。

var Person=function(){};
var Programmer=function(){};
Programmer.prototype=new Person();
var p=new Programmer();

它们之间的关系是,var p1=new Person(), p1.__proto__=Person.prototype, p.__proto__=Programmer.prototype=p1,因此,p.__proto__.__proto=Person.prototype,done!

最新文章

  1. ASP.NET-自定义HttpModule与HttpHandler
  2. 2-sat(and,or,xor)poj3678
  3. vs版本的改变处理
  4. 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】
  5. Golang学习 - bytes 包
  6. JDBC操作TimesTen
  7. Android——仿QQ聊天撒花特效
  8. 学习笔记——Java包装类
  9. LVS三种模式分析(超详细)
  10. 《用TCP/IP进行网络互连》读书笔记
  11. 简单的cookie读写封装
  12. Spark:reduceByKey函数的用法
  13. linux找不到动态链接库 .so文件的解决方法(转自:http://www.cnblogs.com/xudong-bupt/p/3698294.html)
  14. Yii框架基础增删查改
  15. (4)Linux常用基本操作
  16. TensorFlow与caffe中卷积层feature map大小计算
  17. OutputStreamWriter与InputStreamReader(转换流)的编码解码
  18. HDOJ2010_水仙花数
  19. java中final,finally,finalize三个关键字的区别
  20. Waymo在美国推出自动驾驶汽车共享服务

热门文章

  1. java环境变量配置备忘录
  2. SharePoint 2010 网络上的开发经验和资源
  3. JDBC源码解析
  4. Spark核心组件
  5. linux 下svn同步更新钩子
  6. iOS开发:小技巧积累
  7. ZOJ 2314 Reactor Cooling 带上下界的网络流
  8. CORS跨域限制以及预请求验证
  9. Centos6.4环境下DNS服务器的搭建
  10. Python实现接口测试中的常见四种Post请求数据