IIssNan's Notes

Quick notes


  • 首页

  • 归档

  • 标签

  • 搜索

根据 UserAgent 做页面跳转

发表于 2011-11-03 | | 阅读次数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(function(window, undefined) {
'use strict';
var keywords = [
'iPod', 'iPhone', 'Android', 'Opera Mini',
'BlackBerry', 'webOS', 'UCWEB', 'Blazer',
'PSP', 'IEMobile', 'Symbian'
].join('|');
var pa = new RegExp(keywords, 'g');
if ( pa.test(window.navigator) ) {
window.location.href = 'http://m.example.com';
}
})(window);

Strict Mode

发表于 2011-10-26 | | 阅读次数
  • MDN - Strict Mode
  • John Resig - ECMAScript 5 Strict Mode JSON and more

JSDoc toolkit

发表于 2011-10-25 | | 阅读次数
  • Version2
  • Version3

JavaScript 中判断对象是否为空

发表于 2011-10-18 | | 阅读次数

判断 JavaScript 对象是否是一个空的对象,可以遍历对象。若对象拥有任意的实例属性,则对象非空。

1
2
3
4
5
6
7
8
9
10
11
12
/**
* Is #obj empty?
* @param {Object} obj object to be detected.
*/
function isEmptyObject(obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
return false;
}
}
return true;
}

若 ECMAScript 5 的 Object.keys 可用,则可以判断 Object.keys 返回数组的长度:

1
2
3
4
5
6
7
function isEmptyObject(obj) {
if (typeof Object.keys === "function") {
return Object.keys(obj).length === 0;
} else {
// 遍历对象
}
}

参考资料:

  • How do I test for an empty Javascript object from JSON?

JavaScript 构造函数的返回值

发表于 2011-10-18 | | 阅读次数

当使用 new 操作符调用构造函数时,构造函数的内部属性 [[Construct]] 属性将被调用。这个属性定义在 ECMA-262 3rd Edition 的 [[Construct]]部分。

构造函数 F 的内部属性 [[Construct]] 被调用时,以下步骤将会执行:

  1. 创建 一个原生的 ECMAScript 对象,记为 o;
  2. 设定 o 的 [[Class]] 属性为 “Object”,即 o.Class = “Object”;
  3. 获取 F 的 prototype 属性的值,记为 Fp ;
  4. 若 Fp 是一个对象,设定 o 的 [[Prototype]] 属性为 Fp,即 o.Prototype = Fp;
  5. 若 Fp 不是一个对象,设定 o 的 [[Prototype]] 属性为 Object prototype 的值。
  6. 调用 F 的 [[Call]] 属性。将 o 作为 this 的值,传入 [[Construct]] 的参数作为参数,即 F.call(o, arguments),执行结果 记为 Fc
  7. 若 Fc 是一个对象, 那么返回 Fc;
  8. 返回 o

从第 7 步可以看到,当构造函数F执行后的返回值是一个对象时,new F() 的值即为返回的对象:

1
2
3
4
5
6
7
8
9
10
11
12
function ConstructorReturnObject(){
this.test = "test";
return new String("testString");
}
var t2 = new ConstructorReturnObject();
// t2 并没有 test 属性
console.log(t2.test); // undefined
// t2的类型是 String
// 输出 [object String]
console.log(Object.prototype.toString.call(t2));

当构造函数 F 执行的返回值类型非对象时,new F() 即返回 this:

1
2
3
4
5
6
7
8
function ConstructorReturnNonObjectValue() {
this.test = "test";
return "testString";
}
var t1 = new ConstructorReturnNonObjectValue();
// 输出 {test: "test"}
console.log(t1);

参考资料:

  • What values can a constructor return to avoid returning this
  • [[Construct]]
1…323334…37
IIssNan

IIssNan

胡编一通,乱写一气

183 日志
6 分类
111 标签
RSS
GitHub Twitter 豆瓣 知乎
© 2011 - 2017 IIssNan
由 Hexo 强力驱动
主题 - NexT.Pisces
0%