1.null与Object.prototype使用typeof操作符结果都是object,但他们都不是Object的实例。

typeof null  // object
null instanceof Object // false typeof Object.prototype // object
Object.prototype instanceof Object // false

理解:typeof是判断数据所属的类型,而instanceof判断一个对象是不是另一个‘类’的实例。(这是一句废话)所有的对象使用typeof运算返回object都不算错,我们可以认为一切皆是Object。但是,这没有什么意义;a instanceof C表示a是否是由C创造出来。显然Object是不能new一个null出来的。虽然Object.prototype是一个真正的object,但是,它也不是Object构造出来的。想想看,哪个构造器能构造自己的原型,而且原型是自函数产生那一刻便存在的。

2.在js中有些符号没有传递性以及数学上的可推导性。例如a<b,b<c;那么a<c。在js中未必成立

 true < '2' // true
'2' < 'a' // true
true < 'a' // false.不管怎么样都是false

结论:布尔值可以与数字(无论是Number还是String)比较大小,true为1,false为0;当至少有一边是非数字字符串时,如:'a','sed','2ws'......,另一边必须也是字符串,可以是数字的。如:'2','b'等。在与字符串做加法运算时,true能直接转换成'true'.

3.null与0的激情。直接看代码

null<0 //false
null == 0 // false
null > 0 // false null >=0 // true
null <=0 // true

文档:ECMASCRIPT-262有关<=或者>=规则最后一条是这样的:If r is true or undefined, return false. Otherwise, return true.而刚好r是false,结果就返回true了。但是>或者<而是这样的:If r is undefined, return false. Otherwise, return r.这不是null与0的激情,应该是>=与<=的乱伦。(我猜测是走到最后,由这条规则引起的。文档实在是羞涩)

4.不明白

function A(){}

var a = new A();

var b = A.prototype;

A.prototype = {}; // 为啥这句对下面结果有影响

console.log(a instanceof b.constructor);

已经明白。保存之前的原型,只是绕了一圈。b.construtor还是A。

5.instanceof的结果跟原型有关

function A(){}
function B(){} var ax = new A(); A.prototype = B.prototype = {}; var ay = new A(), b = new B(); ax instanceof A // false ay instanceof A // true b instanceof B // true 的确是B

6.最后贴几道题

//
var a = "123abc";
alert(a);
a.toString = function(){
return 1;
}
alert(a); //
alert(typeof Function.prototype);
alert(Object.prototype instanceof Function);
alert(Function.prototype instanceof Function); //
null == undefined
null >= undefined
null <= undefined //
function A(){
return {
toString:function(){return 2}
};
}
A.prototype.toString = function(){ return 3} var a = new A();
alert(a)

javascript那些不应该忽视的细节的更多相关文章

  1. C语言easy忽视的细节(第四部分)

    前言:本文的目的是记录C这些语言easy忽视的细节.我会每天花一点时间来阅读整理,坚持下去,今天是第一章.也许今天是下个月的第二,明年,今天是第几?--我坚信,,记性不如烂笔头.第四篇了.fight~ ...

  2. JavaScript 被忽视的细节

    语句/表达式 换个角度理解语句(statemaents)和表达式(expressions):表达式不会改变程序的运行状态,而语句会.还有一种叫做表达式语句,可以理解为表达式和语句的交集,如({a:1} ...

  3. Cordova插件中JavaScript代码与Java的交互细节介绍

    在Cordova官网中有这么一张架构图:大家看右下角蓝色的矩形框"Custom Plugin"--自定义插件.意思就是如果您用Cordova打包Mobile应用时,发现您的移动应用 ...

  4. ajax容易忽视的细节

    用了很长时间的ajax,自己也写过原生ajax请求,但是发现自己对于ajax理解仍然非常肤浅. 1.ajax请求后,服务器会返回数据,返回头中content-type直接影响responseXML,r ...

  5. 【JavaScript】我的JavaScript技术总结第一篇——编程细节

    遍历数组 for (var i=0, l=arr.length; i<l; i++) 这样写的一个好处就是让每次循环少一步获取数组对象长度的操作,数组长度越长,价值越明显. 判断变量的真假 if ...

  6. 学习vue容易忽视的细节

    1.对于自定义标签名(组件名称),Vue.js 不强制要求遵循 W3C 规则 (小写,并且包含一个短杠),尽管遵循这个规则比较好.HTML 特性是不区分大小写的.所以,当使用的不是字符串模板,came ...

  7. android studio你可能忽视的细节——启动白屏?drawable和mipmap出现的意义?这里都有!!!

    android studio用了很久了,也不知道各位小伙伴有没有还在用eclipse的,如果还有,楼主真心推荐转到android studio来吧,毕竟亲儿子,你会知道除了启动速度稍微慢些,你找不到一 ...

  8. C#中容易被忽视的细节整理

    (有空更新系列) 1.params可变长度参数,默认值是长度为0的数组,而不是空 2.事件和委托默认值都是null 3.bool返回值的事件调用之后,其内部的合并方式是取最后一个合并对象的返回值

  9. [WPF 容易忽视的细节] —— x:Name与Name属性

    一.前言 WPF使用XAML来对界面进行编写,界面与后台逻辑分离.我们也可以写Style.Trigger来实现一些界面效果, 这些都是通过Name来定位控件的,例如Setter.TargetName. ...

随机推荐

  1. Kafka server部署配置优化

    Kafka配置优化其实都是修改server.properties文件中参数值 1.网络和io操作线程配置优化 # broker处理消息的最大线程数        num.network.threads ...

  2. C# 获取当前打开的文件夹2

    这一个则比较投机,准确性不能保证,可以参考:   这个类获取当前进程的句柄:  public class MyProcess     {         private bool haveMainWi ...

  3. Tree通用的系列方法列表-treepanel

    在项目中经常会用到Tree来显示数据进行操作.今天整理出来一系列操作Tree的方法.可供项目中方便调用.不用重复写代码,快速应用,通用性很强. Tree系列方法列表如下:主要针对的是ext.net中的 ...

  4. introduction to anaconda

    一.安装好anaconda后进行更新 说明:在windows环境中的操作,在linux环境中请参考具体书籍. 1.进入cmd命令行 执行 conda update conda conda update ...

  5. 【转】python2与python3的主要区别

    摘自:http://www.cnblogs.com/codingmylife/archive/2010/06/06/1752807.html 1.性能 Py3.0运行 pystone benchmar ...

  6. [Jobdu] 题目1545:奇怪的连通图

    题目描述: 已知一个无向带权图,求最小整数k.使仅使用权值小于等于k的边,节点1可以与节点n连通. 输入: 输入包含多组测试用例,每组测试用例的开头为一个整数n(1 <= n <= 100 ...

  7. Mysql 操作命令 详解

    目的:1. 掌握mysql的安装,建库.建表.表的三种基本操作.查询.多表查询.数据库的备份与恢复2. MYSQL 服务器的简单维护3. mysql+apache+php的环境搭建 一.如何安装mys ...

  8. 初学 Haskell 练习:算24点

    其中用到了 Monad 做不确定性计算.运行速度很快. -- woodfox, Oct 10, 2014 import Control.Applicative import Control.Monad ...

  9. TensorFlow运作方式入门

    TensorFlow运作方式入门 代码:tensorflow/g3doc/tutorials/mnist/ 本篇教程的目的,是向大家展示如何利用TensorFlow使用(经典)MNIST数据集训练并评 ...

  10. ubuntu图形界面调出命令行

    新安装的ubuntu12.04在左边的快捷方式里默认是没有终端图标的,可以使用如下方法打开终端: 使用ctrl+alt+t.这个组合键适合ubuntu的各种版本.但是,在使用KVM虚拟机时可能会出现问 ...