基本数据类型

简单数值类型: 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. WebAPI示例

    一.新建项目 二. 代码: Models.Products实体类 public class Product { /// <summary> /// 产品编号 /// </summar ...

  2. java工程师要求

    高级JAVA研发工程师 8000-15000元/月 职位信息 职位描述 岗位要求:1.五年以上软件研发经验,两年以上软件架构设计经验:2.精通weblogic.jboss tomcat.websphe ...

  3. java研发常见问题总结 1

    1.java中所有类的父类是什么?他都有什么方法? Object类是所有类的直接或间接基类,如果一个类在声明时未继承基类,Java就默认其基类是Object,故Object被称为根类.该类位于java ...

  4. E. New Reform_贪心,深搜,广搜。

    E. New Reform time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  5. React的安装

    创建: 2019/05/01 完成: 2019/05/01 create-react-app  学习及创建单页app npx create-react-app my-app cd my-app npm ...

  6. 2017.11.2 JavaWeb----第六章 Servlet技术

    JavaWeb ------第六章 Servlet技术 (1)在Web应用程序开发中,一般由JSP JavaBean技术和 Servlet技术的结合实现MVC开发模式.在MVC开发模式中将Web程序的 ...

  7. mysql常用命令添加外键主键约束存储过程索引

    数据库连接 mysql -u root -p123456 查看表 show databases 创建数据库设置编码 create table books character set utf8; 创建用 ...

  8. Mysql常见的引擎

    常用的引擎是:Innodb和Myiasm这两种引擎: innodb: 提供了对事务的ACID操作,还提供了行级锁和外键约束,,他的优势就是处理大量数据,在msql启动的时候,首先会建立一个缓存池,主要 ...

  9. device not ready cuda

    问题描述: CUDA: 使用cudaEventElapsedTime时返回device not ready error 强调下我是用谷歌大神搜索到的结构哦! http://stackoverflow. ...

  10. C#声明方法

    一.声明方法 方法是类中用于执行计算或其它行为的成员. 方法可以分为: ?静态方法:可以通过类进行访问.?实例方法:可以通过类的对象进行访问. 1. C#方法的声明 声明方法的语法格式如下: 访问修饰 ...