文档章节

Javascript 高级教程 笔记

Japer1987
 Japer1987
发布于 2017/07/20 14:01
字数 833
阅读 0
收藏 0

数据类型

        console.log(typeof 1);         // number
        console.log(typeof "a");       // string
        console.log(typeof false);     // boolean
        console.log(typeof undefined); // undefined
        console.log(typeof null);      // ----->object
        console.log(null instanceof Object); // ----->false
        console.log(null == undefined); // ---->true
        console.log(null === undefined); // ---->false

        console.log(typeof new Object()); // object
        console.log(typeof new Function()); // function
        console.log(typeof new Array());    // object
  • 为什么 typeof 运算符对于 null 值会返回 "Object"?。 这实际上是 JavaScript 最初实现中的一个错误,然后被 ECMAScript 沿用了。现在,null 被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它仍然是原始值。
  • undefined 是声明了变量但未对其初始化时赋予该变量的值(提示:值 undefined 并不同于未定义的值。但是,typeof 运算符并不真正区分这两种值),null 则用于表示尚未存在的对象
  • NaN 的另一个奇特之处在于,alert(NaN == NaN); //输出 "false" 不推荐使用 NaN 值本身用函数 isNaN()

slice() 和 substring() 方法的主要不同

对于负数参数,slice() 方法会用字符串的长度加上参数,substring() 方法则将其作为 0 处理

instanceof 运算符

在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 "object" instanceof 方法要求开发者明确地确认对象为某特定类型

var oStringObject = new String("hello world");
alert(oStringObject instanceof String);	//输出 "true"

混合的构造函数/原型方式

联合使用构造函数和原型方式,就可像用其他程序设计语言一样创建对象。这种概念非常简单,即用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法)。结果是,所有函数都只创建一次,而每个对象都具有自己的对象属性实例。

function Car(sColor,iDoors,iMpg) {
  this.color = sColor;
  this.doors = iDoors;
  this.mpg = iMpg;
  this.drivers = new Array("Mike","John");
}

Car.prototype.showColor = function() {
  alert(this.color);
};

动态原型方法

function Car(sColor,iDoors,iMpg) {
  this.color = sColor;
  this.doors = iDoors;
  this.mpg = iMpg;
  this.drivers = new Array("Mike","John");

  if (typeof Car._initialized == "undefined") {
    Car.prototype.showColor = function() {
      alert(this.color);
    };

    Car._initialized = true;
  }
}

对象冒充

function ClassB(sColor) {
    this.newMethod = ClassA;
    this.newMethod(sColor);
    delete this.newMethod;
}
function ClassB(sColor, sName) {
    this.newMethod = ClassA;
    this.newMethod(sColor);
    delete this.newMethod;

    this.name = sName;
    this.sayName = function () {
        alert(this.name);
    };
}
var objA = new ClassA("blue");
var objB = new ClassB("red", "John");
objA.sayColor();	//输出 "blue"
objB.sayColor();	//输出 "red"
objB.sayName();		//输出 "John"

call() 方法

function sayColor(sPrefix,sSuffix) {
    alert(sPrefix + this.color + sSuffix);
};

var obj = new Object();
obj.color = "blue";

sayColor.call(obj, "The color is ", "a very nice color indeed.");

与继承机制的对象冒充方法一起使用该方法

function ClassB(sColor, sName) {
    //this.newMethod = ClassA;
    //this.newMethod(color);
    //delete this.newMethod;
    ClassA.call(this, sColor);

    this.name = sName;
    this.sayName = function () {
        alert(this.name);
    };
}

apply() 方法

function sayColor(sPrefix,sSuffix) {
    alert(sPrefix + this.color + sSuffix);
};

var obj = new Object();
obj.color = "blue";

sayColor.apply(obj, new Array("The color is ", "a very nice color indeed."));

与继承机制的对象冒充方法一起使用该方法

function ClassB(sColor, sName) {
    //this.newMethod = ClassA;
    //this.newMethod(color);
    //delete this.newMethod;
    ClassA.apply(this, new Array(sColor));
    //ClassA.apply(this, arguments);

    this.name = sName;
    this.sayName = function () {
        alert(this.name);
    };
}

for in 和 hasOwnProperty

我们不能仅仅使用for-in语句来遍历items对象的所有属性,还需要使用 hasOwnProperty方法(验证items对象是否包含某个属性),因为对象的原型 也会包含对象的其他属性(JavaScript基本的Object类中的属性将会被继承,并 存在于当前对象中,而对于这个数据结构来说,我们并不需要它们)。

© 著作权归作者所有

Japer1987
粉丝 1
博文 40
码字总数 19747
作品 0
深圳
程序员
私信 提问
分享51本关于JavaScript方面的学习书籍(免费下载)

分享51本关于JavaScript方面的学习书籍(免费下载) 1、JavaScript面向对象15分钟教程 2、原型、作用域、闭包的完整解释 3、Javascript面向对象特性实现(封装、继承、接口) 4、JavaScript面向...

邓剑彬
2012/12/02
1K
12
读《JavaScript高级程序设计》

1、JavaScript学习笔记1:JavaScript学前介绍 http://my.oschina.net/bluefly/blog/478575 2、JavaScript学习笔记2:JavaScript基本概念 http://my.oschina.net/bluefly/blog/484445......

slyso
2015/07/14
0
0
如何学习Javascript?你是入门,还是精通?

首先要说明的是,咱现在不是高手,最多还是一个半桶水,算是入了JS的门。   谈不上经验,都是一些教训。   这个时候有人要说,“靠,你丫半桶水,凭啥教我们”。您先别急着骂,先听我说。...

coffeescript
2014/07/23
389
0
分享35本关于PHP的学习书籍(免费下载)

分享35本关于PHP的学习书籍(免费下载) 1、PHP面向对象编程 2、PHP与MVC开发模式 3、PHP_面向对象教程(强力推荐) 4、Smarty php模板引擎 5、php_mysql_web_dbs 6、PHP_和_MySQL_WEB_开发_部...

邓剑彬
2012/12/01
469
4
NODE高级编程阅读笔记系列(一)

本篇涉及以下主题 node简单介绍 事件驱动编程 模块化 缓冲区处理 Node简单介绍 直接用官方的那句话: Node.js 是一种建立在Google Chrome's V8 引擎上的non-blocking(非阻塞),event-driven(...

可爱的圣诞老人
2018/05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

springMVC 文件上传

相关依赖 使用 springMVC 提供的文件上传需要在项目中加入两个 jar 包,对应的 maven 的依赖分别是:commons-io 和 commons-fileupload <dependency> <groupId>commons-io</groupId> ......

dahuil
11分钟前
0
0
以太坊中文文档翻译-智能合约

本文原文链接 点击这里获取Etherscan API 中文文档(完整版) 完整内容排版更好,推荐读者前往阅读。 智能合约(Contracts) 智能合约相关的 API,接口的参数说明请参考Etherscan API 约定, 文...

Tiny熊
21分钟前
0
0
Tomcat

16.1 Tomcat介绍 16.2 安装jdk 16.3 安装Tomcat 16.4 配置Tomcat监听80端口 16.5/16.6/16.7 配置Tomcat虚拟主机 16.8 Tomcat日志 扩展 java容器比较 http://my.oschina.net/diedai/blog/2713......

tobej
31分钟前
0
0
苹果面向Mac发布英特尔处理器漏洞缓解措施

去年苹果向Safari浏览器推出安全更新以修复基于ARM价格和英特尔的处理器存在的推测执行系列安全漏洞。 不过当时苹果并未发布有关处理器性能下降的测试结果,但大家都知道安装缓解措施会造成处...

linux-tao
今天
1
0
第一个vue应用

https://www.bootcdn.cn/vue/ <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <style> .bg{ color: red; ......

江戸川
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部