随笔分类 - JavaScript基础
摘要:JavaScript 有一个常规的 0 和一个 -0 var a = 0/-3; // -0 var b = 0*-3; // -0 对负零进行字符串转化会返回 0; (-0).toString(); // 0 -0 + ''; // 0 String(-0); // 0 JSON.stringif
阅读全文
摘要:熟悉传统语言(C)的开发人员可能都遇到过编译错误(compiler error)或者运行时错误(runtime exception),例如 “除以0”。然后在 JavaScript 中上例的结果为 Infinity var a = 1/0; // Infinity var a = -1/0; //
阅读全文
摘要:如果数学运算的操作数不是数字类型或者无法解析为常规的十进制或十六进制数字,就无法返回一个有效的数字,这种情况下返回值为 NaN。NaN 意指 “不是一个数字”,这个名字容易引起误会,“无效数值” “失败数值” 或者 “坏数值” 可能更准确些。 var a = 2 / 'foo'; // NaN ty
阅读全文
摘要:undefined 类型只有一个值,即 undefined。 null 类型也只有一个值,即 null。它们既是类型也是值。null 指空值,undefined 指没有值或者: undefined 指从未赋值 null 指曾赋过值,但是目前没有值 null 是关键字,不是标识符,不能将其当作变量来使
阅读全文
摘要:数字的呈现方式决定了 “整数” 的安全值范围远远小于 Number.MAX_VALUE(1.798e+308)。 能够被安全呈现的最大整数是: 2^53 - 1,即 9007199254740991,在 ES6 中被定义为 Number.MAX_SAFE_INTEGER。 最小整数 -9007199
阅读全文
摘要:二进制浮点数最大的问题是会出现如下的情况: 0.1+0.3 0.3; // false 从数学角度来说,上面的条件判断应该为 true,可结果为什么是 false 呢? 简单来说,二进制浮点数中的 0.1 和 0.2 并不是十分精确,它们想加的结果并非刚好等于 0.3,而是一个比较接近的数字,0.3
阅读全文
摘要:JS 中的数字常量一般用十进制表示 var a = 42; var b = 42.3 数字前面的 0 可以省略 var a = 0.42 var b = .42 小数点后小数部分最后面的 0 也可以省略 var a = 42.0; var b = 42.; 特别大和特别小的数字默认用指数格式显示,与
阅读全文
摘要:字符串经常被当成字符数组,但 JS 中的字符串和字符数组并不是一回事 var a = 'foo'; var b = ['f', 'o', 'o'] a.length; // 3 b.length; // 3 a.indexOf('o'); // 1 b.indexOf('o'); // 1 var
阅读全文
摘要:有时候需要将类数组(一组通过数字索引的值)转换成真正的数组,这一般通过数组工具函数来实现,例如,一些 DOM 查询操作会返回 DOM 元素列表,它们并非真正意义的数组,但十分类似。另一个例子是通过 arguments 对象(类数组)将函数的参数当作列表来访问 工具函数 slice(...) 经常用于
阅读全文
摘要:1、和其他强类型语言不同,JS中数组可以容纳任何类型的值 var a = [1, '2', [3]] 2、数组声明后,不需要预先设定大小 var a = []; a.length; // 0; a[0] = 1; a[1] = '2'; a.length; // 2 3、delete 运算符可以将单
阅读全文
摘要:该安全防范机制对在浏览器中运行的 JavaScript 代码来说还是很有帮助的 检查全局变量是否已被声明 在程序中使用全局变量 DEBUG 作为调试模式的开关。在输出调试信息到控制台之前,检查变量是否已被声明。顶层的全局变量声明 var DEBUG = true 只在 debug.js 文件中才有,
阅读全文
摘要:var a; typeof a; // undefined var b = c; var c; b = c; typeof b; // undefined typeof c; // undefined 大多数开发者倾向于将 undefined 等同于 undeclared(未声明),但在 JavaS
阅读全文
摘要:JavaScript 有 7 中内置类型: 空置 ( null ) 未定义( undefined ) 布尔值( boolean ) 数字( number ) 字符串( string ) 对象( object ) 符号( symbol, ES6 新增) 除对象之外,其他统称为 “基本类型” typeo
阅读全文
摘要:我们已经明白了 “类” 和 “委托” 这两种设计模式的理论区别,我们再看看它们思维模型方面的区别 典型的原型面向对象风格 function Foo(who) { this.me = who; } Foo.prototype.identify = function () { return "I am
阅读全文
摘要:[[Prototype]] 机制就是指对象中的一个内部链接引用另一个对象。如果在第一个对象上没有找到需要的属性或者方法引用,引擎就会继续在 [[Prototype]] 关联的对象上进行查找。同理,如果后者中也没有找到需要的引用就会继续查找它的 [[Prototype]] ,以此类推。这一系列对象的链
阅读全文
摘要:[[Prototype]] 机制就是存在于对象中的一个内部连接,它会引用其他对象。这个链接的作用:如果在对象上没有找到需要的属性和方法,引擎就会继续在 [[Prototype]] 关联的对象上进行查找。同理,如果在后者中也没有找到需要的引用就会继续查找它的 [[Prototype]],以此类推。这一
阅读全文
摘要:instanceof function Foo() { // ... } Foo.prototype.blah = ...; var a = new Foo(); 我们如何找到 a 的 “祖先” (委托关联)呢?第一种方法: a instanceof Foo; // true instanceof
阅读全文
摘要:function Foo(name) { this.name = name; } Foo.prototype.myName = function () { return this.name; } var a = new Foo('a'); a.myName(); // 'a' JS 中太多模拟类的行
阅读全文
摘要:function Foo(name) { this.name = name; } Foo.prototype.myName = function () { return this.name; } var a = new Foo('a'); var b = new Foo('b'); a.myName
阅读全文
摘要:function Foo() { // ... } var a = new Foo(); 是什么让我们认为 Foo 是一个类,Foo() 是构造函数调用。其中一个原因是我们看到了关键字 new。 除了令人迷惑的构造函数语义外,Foo.prototype 还有另一个绝招 function Foo()
阅读全文