基本数据类型

简单数值类型: 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!

Javascript Step by Step - 01的更多相关文章

  1. 转载自~浮云比翼:Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥)

    Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥)   介绍:什么是线程,线程的优点是什么 线程在Unix系统下,通常被称为轻量级的进程,线程虽然不是进程,但却可 ...

  2. WinForm RDLC SubReport Step by step

    最近在做的一个PO管理系统,因为要用到订单打印,没有用水晶报表,直接使用VS2010的Reporting.参考了网上的一些文章,但因为找到的数据是用于WebForm的,适配到WinForm有点区别,竟 ...

  3. 精通initramfs构建step by step

    (一)hello world  一.initramfs是什么  在2.6版本的linux内核中,都包含一个压缩过的cpio格式 的打包文件.当内核启动时,会从这个打包文件中导出文件到内核的rootfs ...

  4. Neural Networks and Deep Learning(week4)Building your Deep Neural Network: Step by Step

    Building your Deep Neural Network: Step by Step 你将使用下面函数来构建一个深层神经网络来实现图像分类. 使用像relu这的非线性单元来改进你的模型 构建 ...

  5. Step by Step use OBD2 Scanner Guide

    Learning to use a good automotive OBD2 code reader is one of the best ways you can continually inves ...

  6. 课程一(Neural Networks and Deep Learning),第四周(Deep Neural Networks)——2.Programming Assignments: Building your Deep Neural Network: Step by Step

    Building your Deep Neural Network: Step by Step Welcome to your third programming exercise of the de ...

  7. Step by Step Process of Migrating non-CDBs and PDBs Using ASM for File Storage (Doc ID 1576755.1)

    Step by Step Process of Migrating non-CDBs and PDBs Using ASM for File Storage (Doc ID 1576755.1) AP ...

  8. 稀疏表示step by step(转)

    原文地址:稀疏表示step by step(转)作者:野火春风 稀疏表示step by step(1)     声明:本人属于绝对的新手,刚刚接触“稀疏表示”这个领域.之所以写下以下的若干个连载,是鼓 ...

  9. Step By Step(Lua字符串库)

    Step By Step(Lua字符串库) 1. 基础字符串函数:    字符串库中有一些函数非常简单,如:    1). string.len(s) 返回字符串s的长度:    2). string ...

  10. Step By Step(Lua表达式和语句)

    Step By Step(Lua表达式和语句) 一.表达式:    1. 算术操作符:    Lua支持常规算术操作符有:二元的"+"."-"."*& ...

随机推荐

  1. selenium 移动端测试

    selenium 可以进行移动测试的.Anroid ,IOS .进行移动端测试,需要相应的SDK ,apk.其中anriod 是selenium 支持有2中选择,remote server 和 tes ...

  2. SQL varchar转float实现数字比较

    select * from table where cast('经纬度' as float ) < 90

  3. 【2017-06-20】Linux应用开发工程师C/C++面试问题记录之一:Linux多线程程序的同步问题

    参考之一:Linux 线程同步的三种方法 链接地址:http://www.cnblogs.com/eleclsc/p/5838790.html 简要回答: Linux下线程同步最常用的三种方法就是互斥 ...

  4. 1929. Teddybears are not for Everyone (Timus) (combination+reading questions)

    http://acm.timus.ru/problem.aspx?space=1&num=1929 combination problems. 排列组合问题. According to the ...

  5. webpack-dev-middleware插件的使用

    我们在使用webpack 编译文件时,每次改动文件都要去重新编译,是不是很麻烦,这时候我们就用到了webpack-dev-middleware 插件,该插件对更改的文件进行监控,编译, 一般和 web ...

  6. Java中的逻辑运算符短路效应

    在Java中逻辑运算符&& 和 ||,它们都存在短路效应. 对于a && b,只有当a和b同时为true时,整个表达式才为true(在java中,首先运算表达式a,如果 ...

  7. 一篇RxJava友好的文章(三)

    组合操作符 继上一篇讲述了过滤操作符,这一篇讲述组合操作符,组合操作符可用于组合多个Observable.组合操作符相对于过滤操作符要复杂很多,也较难以理解,需要花费时间去看文档查资料,写demo才能 ...

  8. 你的 maven 如何使用

    maven把你从痛苦的找包中解脱,让你感觉如此神奇,也让你的项目能够如此之小--功能一 依赖管理  (pom.xml 项目对象模型配置文件) 没有对比就没有伤害 maven让你可以随意增加删除项目的功 ...

  9. XCode快捷键使用

    :first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdow ...

  10. jquery-ui-custom autocomplete

    //jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8& ...