JavaScript为啥(typeof Object)返回的是function

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript为啥(typeof Object)返回的是function相关的知识,希望对你有一定的参考价值。

function跟六大基本数据类型什么关系。
(typeof String)也是 function。
typeof(typeof Object) 竟然是String,好神奇。到底为什么。

这是因为Object和String都是javascript的内部函数对象,typeof是获取函数对象的类型,即function。
与此类似的还有Array、Date、RegExp、Error等等

补充:
typeof(typeof Object)

typeof Object的返回值为“function”,是个字符串,那么再获取它的类型时,肯定就是String咯!
参考技术A 你这里是String,本身就是方法对象。
JavaScript是弱类型语言,数据类型不像C声明的那么明确追问

我只是想问,
(typeof Object)返回的为什么function。function在js中的作用或者地位。

追答

Function是最顶层的构造器。它构造了系统中所有的对象,包括用户自定义对象,系统内置对象,甚至包括它自已。

console.info(Function instanceof Function);//true
console.info(Function instanceof Object);//true
console.info(Object instanceof Function);//true
function Foo() ;
var foo = new Foo();
console.info(foo instanceof Foo); // true
console.info(foo instanceof Function); // false
console.info(foo instanceof Object); // true
console.info(Foo instanceof Function); // true
console.info(Foo instanceof Object); // true

js基础知识点收集

js基础知识点收集

js常用基本类型

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([]));  // object
        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(一切引用类型都是对象,对象是属性的集合)

js原型及原型链

function Fn() { }
        Fn.prototype.name = ‘王福朋‘;
        Fn.prototype.getYear = function () {
            return 1988;
        };

        var fn = new Fn();
        console.log(fn.name);
        console.log(fn.getYear());

fn是Fnnew出来的对象,fn.proto === Fn.prototype

js原型链

 function Foo() {
    }
    var f1 = new Foo();
        //f1.a = 10;
    Foo.prototype.a = 100;
    Foo.prototype.b = 200;
    console.log(f1.a);//100
    console.log(f1.b);//200

f1赋值的时候有

    console.log(f1.a);//10
    console.log(f1.b);//200

原型链:访问一个对象的属性时,先在基本属性中查找,如果没有,再沿着__proto__这条链向上找,这就是原型链

js原型链继承

      A = {
        a: function () {
            console.log(‘a‘);
        }
    }
    B= {
        b: function () {
            console.log(‘b‘);
        }
    }
    A.a();//a
    B.b();//b
    Object.setPrototypeOf(A,B);//把B的原型给A
    A.b();//b

js上下文

提到js的上下文先说下this关键字
在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了

情况1:构造函数

   function A() {
        this.a = ‘a‘;
        this.hello = function () {
            console.log(this.a);//a
        }
        console.log(this);//{a: "a"}
    }
    var a = new A();
    a.hello();

如果函数作为构造函数用,那么其中的this就代表它即将new出来的对象。

情况2:函数作为对象的一个属性
console.log(this.a);//a

情况3:函数用call或者apply调用

  var B = {
        b: ‘b‘
    }
    var A = function () {
        console.log(this.b);
    }
    A.call(B);//b

当一个函数被call和apply调用时,this的值就取传入的对象的值。

情况4:函全局 & 调用普通函数
在全局环境下和普通函数调用的时候,都是window





以上是关于JavaScript为啥(typeof Object)返回的是function的主要内容,如果未能解决你的问题,请参考以下文章

为啥带有对象的 typeof 数组返回“object”而不是“array”? [复制]

js基础知识点收集

怎么判断一个对象是不是数组类型?

Javascript中判断变量是数组还是对象(array还是object)

Js中常用知识点(typeof动态属性变量作用域)

为啥 typeof 有时只抛出 ReferenceError?