- 浏览: 90407 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
zhaohaolin:
哟,龙哥,你还搞C,好高大上的东西啊
xcode初探 -
robinqu:
又改了一些小错误~
[更新20100922]jQuery Location Select 插件- 地址联动、地理检测 -
robinqu:
kimm 写道这个功能不错,就是应用有点局限,内网就不好用了。 ...
[更新20100922]jQuery Location Select 插件- 地址联动、地理检测 -
robinqu:
更新了⋯⋯把代码重写了一次⋯⋯大家可以实现任何种类的联动,以及 ...
[更新20100922]jQuery Location Select 插件- 地址联动、地理检测 -
robinqu:
truth315 写道不好意思了,compu指的是getAre ...
JavaScript Prototype基础
判定JS的对象类型基本是MISSION Impossible。
JS的对象可能是JS核心对象、可能是自定义类、可能是空等等,但是其弱类型机制又无法有什么很准确的方法来判定这个对象到底是什么,特别是当这个东西是有继承的……
typeof运算符是JS中主要的判定方式,但它很怪癖:
再接着就是instanceof了
The left side of instanceof is the value to be tested, and the right side should be a constructor function that defines a class.
上面这个语句中,JS会测试这句话的左值,右值是一个构造函数;任何这个类的实例或这个类父类的实例都会返回ture
假设f是一个Function,以下表达式都是ture
如果你想确定一个对象是一个确定类的实例,而不是其子类的实例,你必须比较这两个对象的构造函数:
Object.toString( ) for Object Typing
百年不用的toString()方法
Object默认的toString()方法,根据ECMAScript的标准,会返回一些必要的信息,格式如下:
[object class]
class是一个对象的内部类型,通常是其构造函数的名字。
数组对象的class值为“Array”;函数对象的class值为“Function”;日期对象Date的class值为“Date”;Math对象的class值为“Math”;Error(包括其任何子类)对象的class值为“Error”。
而客户端对象都有相应的class值,像Window、Document、Form等等。
用户自定义对象,只有一个“Object”的class值,所以toString()其实也只对内建对象有效。
下面根据以上思想,编写一个增强型的类型判断函数:
JS的对象可能是JS核心对象、可能是自定义类、可能是空等等,但是其弱类型机制又无法有什么很准确的方法来判定这个对象到底是什么,特别是当这个东西是有继承的……
引用
typeof is useful primarily for distinguishing primitive types from objects. There are a few quirks to typeof. First, remember that typeof null is "object", while typeof undefined is "undefined". Also, the type of any array is "object" because all arrays are objects. However, the type of any function is "function", even though functions are objects, too.
typeof运算符是JS中主要的判定方式,但它很怪癖:
typeof null // Yields "obejct" typeof undefined // yields "undefined" typeof array_var // array_var represents an array variable; yields "object" typeof function_var // function_var represents an function variable; yields "function"
再接着就是instanceof了
x instanceof Array
引用
The left side of instanceof is the value to be tested, and the right side should be a constructor function that defines a class.
上面这个语句中,JS会测试这句话的左值,右值是一个构造函数;任何这个类的实例或这个类父类的实例都会返回ture
假设f是一个Function,以下表达式都是ture
typeof f == "function" f instanceof Function f instanceof Object
引用
If you want to test whether an object is an instance of one specific class and not an instance of some subclass, you can check its constructor property.
如果你想确定一个对象是一个确定类的实例,而不是其子类的实例,你必须比较这两个对象的构造函数:
var d = new Date( ); // A Date object; Date extends Object var isobject = d instanceof Object; // evaluates to true var realobject = d.constructor==Object; // evaluates to false
Object.toString( ) for Object Typing
百年不用的toString()方法
引用
A useful trick that uses the default implementation of the Object.toString( ) method can help in this case.
An interesting feature of the default toString( ) method is that it reveals some internal type information about built-in objects. The ECMAScript specification requires that this default toString( ) method always returns a string of the form:
[object
class]
class is the internal type of the object and usually corresponds to the name of the constructor function for the object.
arrays have a class of "Array", functions have a class of "Function", and Date objects have a class of "Date". The built-in Math object has a class of "Math", and all Error objects (including instances of the various Error subclasses) have a class of "Error". Client-side JavaScript objects and any other objects defined by the JavaScript implementation have an implementation-defined class (such as "Window", "Document", or "Form").
Objects of user-defined types, such as the Circle and Complex classes defined earlier in this chapter, always have a class of "Object", however, so this toString( ) technique is useful only for built-in object types.
An interesting feature of the default toString( ) method is that it reveals some internal type information about built-in objects. The ECMAScript specification requires that this default toString( ) method always returns a string of the form:
[object
class]
class is the internal type of the object and usually corresponds to the name of the constructor function for the object.
arrays have a class of "Array", functions have a class of "Function", and Date objects have a class of "Date". The built-in Math object has a class of "Math", and all Error objects (including instances of the various Error subclasses) have a class of "Error". Client-side JavaScript objects and any other objects defined by the JavaScript implementation have an implementation-defined class (such as "Window", "Document", or "Form").
Objects of user-defined types, such as the Circle and Complex classes defined earlier in this chapter, always have a class of "Object", however, so this toString( ) technique is useful only for built-in object types.
Object默认的toString()方法,根据ECMAScript的标准,会返回一些必要的信息,格式如下:
[object class]
class是一个对象的内部类型,通常是其构造函数的名字。
数组对象的class值为“Array”;函数对象的class值为“Function”;日期对象Date的class值为“Date”;Math对象的class值为“Math”;Error(包括其任何子类)对象的class值为“Error”。
而客户端对象都有相应的class值,像Window、Document、Form等等。
用户自定义对象,只有一个“Object”的class值,所以toString()其实也只对内建对象有效。
下面根据以上思想,编写一个增强型的类型判断函数:
function getType(x) { // If x is null, return "null" // x是null,返回“null” if (x == null) return "null"; // Next try the typeof operator // 先用基础的typeof判定 var t = typeof x; // If the result is not vague, return it if (t != "object") return t; // Otherwise, x is an object. Use the default toString( ) method to // get the class value of the object. // 对于object对象,typeof无能为力,我们来找找对象的class值 var c = Object.prototype.toString.apply(x); // Returns "[object class]" c = c.substring(8, c.length-1); // Strip off "[object" and "]" // If the class is not a vague one, return it. // 如果有具体的class值,而不是单纯的“object" if (c != "Object") return c; // If we get here, c is "Object". Check to see if // the value x is really just a generic object. // 函数运行到这里,那么该对象就是一个Object if (x.constructor == Object) return c; // Okay the type really is "Object" // For user-defined classes, look for a string-valued property named // classname, that is inherited from the object's prototype // 也有可能是自定义类,我们找一下它的构造函数中是否定义了classname这个属性 if ("classname" in x.constructor.prototype && // inherits classname typeof x.constructor.prototype.classname == "string") // its a string return x.constructor.prototype.classname; // If we really can't figure it out, say so. return "<unknown type>"; }
发表评论
-
WebApp在移动端的涅盘- 另类的移动端应用程序开发
2010-09-27 22:35 4517同时欢迎到我的BLOG讨 ... -
ScriptDoc的Notation规则
2010-01-23 19:37 1789这个还是蛮重要的,以前就一直很羡慕Java有一套标准来着: 转 ... -
关于google.setOnLoadCallback()的一点研究
2010-01-12 10:01 6154google.setOnLoadCallback()是goog ... -
ECMA 推出 JavaScript 5
2009-12-28 21:17 1648转发自http://www.comsharp.co ... -
Javascript 事件编程 (二)
2009-09-18 21:28 1641Event Handlers and the this Key ... -
Javascript 事件编程 (一)
2009-09-04 15:27 1272Events and Event Handling 事件和事件 ... -
Javascript CSS编程 (一)元素定位、透明、内联样式
2009-09-03 14:29 2083Querying Element Position and S ... -
Javascript CSS编程 (二)Computed Styles、Class修改、操作样式表
2009-09-03 13:15 5376Scripting Computed Styles 计算样式 ... -
Javascript DHTML动画
2009-09-03 13:00 1241JS实现的动画效果多半 ... -
Javascript IE4 DOM
2009-09-02 17:14 1029很多IE独有的DOM特性是沿袭自IE4的,所以有必要看看IE4 ... -
Javascript 操控选择文本
2009-09-02 17:02 1280Querying Selected Text 查询选择的文本 ... -
Javascript 寻找文档元素
2009-09-02 16:51 2336Finding Elements in a Document ... -
Javascript 窗口的几何关系和相关方法、属性
2009-09-02 10:47 1142Window Geometry 窗口几何关系 引用Scree ... -
JavaScript window下面的常用函数、属性
2009-09-02 10:30 1217我们常用的一些函数都是全局对象window下面的。这里将其梳理 ... -
JavaScript 在浏览器中的相关概念:执行环境、引入脚本、安全策略等
2009-09-02 09:32 1391The Window as Global Execution ... -
JavaScript Namespace模拟
2009-07-15 18:53 1576做JavaScript的大型项目比较痛苦,它没有namespa ... -
JavaScript Class模拟深入 - Duck Typing 和 Class相关的工具类
2009-07-15 17:16 1797Duck Typing 引用If it implements ... -
JavaScript Class模拟深入 - 继承、子类
2009-07-15 16:27 1735Superclasses and Subclasses ... -
javascript this 关键字小提示
2009-07-14 22:01 1194来自:http://www.macji.com/2009/01 ... -
JavaScript Class模拟基础
2009-07-14 16:39 1149Simulating Classes in JavaScrip ...
相关推荐
首先,作者指出JavaScript自带两套类型系统:基本数据类型和对象类型。基本数据类型包括了`undefined`、`string`、`null`、`boolean`、`number`以及`function`,而对象类型主要是指除基本类型之外的所有数据,如数组...
知识点:javascript变量,基本数据类型,alert()函数的使用。 9. 将字串s中的所有字母变为小写字母的方法是s.toLowerCase()。 知识点:javascript字符串操作,toLowerCase()方法的使用。 10. 以下表达式产生一个0...
JavaScript 的高级应用,涵盖了 JavaScript 的基础知识、JavaScript 的实现、JavaScript 小体验、JavaScript 环境搭建、JavaScript 类型、JavaScript 变量和关键字、条件语句、循环语句、函数、对象、BOM 基础函数...
7. Javascript中的数据类型:包括String、Number、Boolean、Null、Object、Function等六种数据类型。 8. 字符串转换数字:可以使用parseInt()和parseFloat()函数将字符串转换为数字。 9. 数字转换字符串:可以使用...
JavaScript 中的数据类型分为基本类型和复杂类型: - **基本类型**:包括 `String`、`Number`、`Boolean`、`Null`、`Undefined`。 - **复杂类型**:`Object` 和 `Function`。 #### 8. 字符型转换成数值型 - `...
JavaScript 练习题汇总 JavaScript 是一种广泛应用于 web ...这些练习题涵盖了 JavaScript 的基础语法、变量、数据类型、运算符、控制结构、函数、数组、对象等多方面的内容,对于初学者和专业开发者都有参考价值。
表示数值数据类型和提供数值常数的对象。 Number 对象 提供所有的 JScript 对象的公共功能。 Object 对象 存储有关正则表达式模式查找的信息。 RegExp 对象 包含一个正则表达式模式。 正则表达式对象 提供对文本...
2. 水果类:创建水果对象,包含水果的类型、位置、速度等属性,并实现水果的生成、移动和消失逻辑。 3. 刀类:定义刀的轨迹和碰撞检测,当刀与水果相交时,执行相应的得分或失败处理。 4. 用户交互:监听用户的鼠标...
首先,我们可以尝试使用`Object.prototype.toString.call()`方法来检测对象的类型。这个方法会返回一个表示该对象内部类的字符串,例如`"[object Array]"`或`"[object Function]"`。当用于`window`对象时,不同的...
7. JavaScript值类型:包括`String`, `Number`, `Boolean`, `Null`, `Undefined`, `Object`, `Symbol`(ES6新增), `BigInt`(ES10新增)。在这里提到了`Function`,但它在ECMAScript规范中被分类为`Object`的一种。 8....
JavaScript是一种解释型、弱类型的脚本语言,主要应用于客户端的网页开发,通过浏览器执行。它支持事件驱动、函数式以及基于原型的编程风格。在HTML和CSS的基础上,JavaScript可以创建丰富的用户交互体验。 在这个...
在我们的场景中,我们可以定义一个XSD文件,其中包含各种输入判定规则,如长度限制、数据类型、格式要求等。 2. **解析XML**:在应用程序中,我们需要解析XML文件,将XML数据转化为程序可以理解的对象。这可以通过...
首先,我们要明白JavaScript中的对象是引用类型,这意味着当你在数组中添加一个对象时,你实际上是在存储该对象的引用。因此,简单的`indexOf`或`includes`方法可能无法有效地检查对象数组,因为它们基于严格相等性...
JavaScript的基础包括变量声明(var, let, const)、数据类型(如字符串、数字、布尔、对象、数组)以及控制流程(条件语句、循环)。在游戏开发中,变量用于存储各种状态信息,如玩家的位置、分数等;数据类型则...
每个棋子对象包含位置信息和其他属性,如颜色、类型等,而棋盘结构用于记录棋局状态。 在用户界面方面,JavaScript可以结合HTML和CSS来创建游戏界面。HTML用于构建基本的布局框架,CSS用于美化界面,而JavaScript...
7. **值类型**:JavaScript中的基本数据类型包括 `String`、`Number`、`Boolean`、`Null`、`Undefined`,以及对象类型 `Object`、`Function`。 8. **类型转换**:`parseInt()` 和 `parseFloat()` 用于将字符串转换...
javascript的官方文档 这些方便实用的信息将帮助您了解 JScript 的各个部分。 在“字母顺序的关键字列表”中,可以找到按字母顺序列出的所有 JScript 语言的主题。如果只需要查看某个主题(例如对象),则有对该主题...