您的位置:首页 > Web前端 > JavaScript

深入理解javascript原型和闭包(1)——万物皆对象

2017-11-16 10:58 573 查看
function show(x) {

console.log(typeof x);    // undefined
console.log(typeof 10);   // number
console.log(typeof 'abc'); // string
console.log(typeof true);  // boolean

console.log(typeof function () {});  //function

console.log(typeof [1, 'a', true]);  //object
console.log(typeof { a: 10, b: 20 });  //object
console.log(typeof null);  //object
console.log(typeof new Number(10));  //object
}
show();


(undefined, number, string, boolean)属于简单的值类型,不是对象。剩下的几种情况——函数、数组、对象、null、new Number(10)都是对象。他们都是引用类型

判断一个变量是不是对象非常简单。值类型的类型判断用typeof,引用类型的类型判断用instanceof

var fn = function () { };

console.log(fn instanceof Object); // true

javascript的对象比较随意——数组是对象,函数是对象,对象还是对象。对象里面的一切都是属性,只有属性,没有方法。那么这样方法如何表示呢?——方法也是一种属性。因为它的属性表示为键值对的形式。

而且,更加好玩的事,javascript中的对象可以任意的扩展属性,没有class的约束。这个大家应该都知道,就不再强调了。

先说个最常见的例子:

var obj = {

a:17,

b:function(x){

alert(this.a+x);

},

c:{

name:’小明’,

year:1991

}

};

以上代码中,obj是一个自定义的对象,其中a、b、c就是它的属性,而且在c的属性值还是一个对象,它又有name、year两个属性。

函数和数组也可以这样定义属性吗?——当然不行,但是它可以用另一种形式,总之函数/数组之流,只要是对象,它就是属性的集合。

以函数为例子:

var fn = function () {

alert(100);

};

fn.a = 10;

fn.b = function () {

alert(123);

};

fn.c = {

name: “小明”,

year: 1991

};

上段代码中,函数就作为对象被赋值了a、b、c三个属性——这就是属性的集合。

在jQuery源码中,“jQuery”或者“$”,这个变量其实是一个函数,可以用typeof验证一下。

console.log(typeof );//functionconsole.log(.trim(” ABC “));

常用的 .trim()也是个函数,<
4000
span style="font-family: STIXGeneral, "Arial Unicode MS", serif; font-size: 80%; font-style: normal; font-weight: normal;">很明显,这就是在或者jQuery函数上加了一个trim属性,属性值是函数,作用是截取前后空格。

javascript与java/C#相比,首先最需要解释的就是弱类型,其次要解释的就是本文的内容——一切(引用类型)都是对象,对象是属性的集合。最需要了解的就是对象的概念,和java/C#完全不一样。

在typeof的输出类型中,function和object都是对象,为何却要输出两种答案呢?都叫做object不行吗?——当然不行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: