zoukankan      html  css  js  c++  java
  • valueOf() toString() typeof instanceof

    ******在chrome console中运行{a:1}.valueOf(); 报错:"SyntaxError: Unexpected token . ",这是由于{}被js引擎解析为代码块,它是没有valueOf方法。


    一、valueOf()

    基本数据类型是否拥有自己原型的valueOf方法。

    1. Undefined:无

    2. Null:无

    3. Number:有 Number.prototype.valueOf

    4. String:有 String.prototype.valueOf

    5. Boolean:有 Boolean.prototype.valueOf

    引用类型是否拥有自己原型的valueOf方法。 

    1. Object:对象实例都拥有valueOf方法,返回对象自身。

    2. Array:无,调用valueOf方法时,返回的也是对象自身。

    3. Function:无,调用valueOf方法时,返回的也是 

    示例如下:

    undefined.valueOf(); //报错

    null.valueOf(); //报错

    var num = 123; num.valueOf(); //123  (若直接使用123.valueOf();会报错:"SyntaxError: Unexpected token ILLEGAL " Why??? who can explain it?)

    "hello".valueOf(); //"hello"

    true.valueOf(); //true

    var o = {a:1}; o.valueOf(); //Object {a: 1} (若直接使用{a:1}.valueOf(); 报错:"SyntaxError: Unexpected token . ",这是由于{}被js引擎解析为代码块,它是没有valueOf方法。)

    var obj = {name:"ting"}; var p = obj.valueOf(); p.name = "change"; console.log(p.name);  //change(说明返回对象自身)

    [1,2,3].valueOf(); //[1,2,3]                                

    var arr = [1,2,3];  var linkArr = arr.valueOf(); linkArr[0] = "ting"; console.log(linkArr); //["ting", 2, 3](说明返回数组本身)

    function f() { console.log("f"); } f.valueOf(); //function f() { console.log("f"); }

    var foo = function() {}; var linkFoo = foo.valueOf(); linkFoo.test = "ting"; console.log(linkFoo.test); //ting (说明返回函数本身)

    二、toString()

    数值、字符串、布尔值、对象都拥有toString方法,null和undefined没有该方法。

    示例如下: 

    var num = 123; num.toString(); //"123"

    "hello".toString(); //"hello" 

    false.toString(); //"false"

    var o = {a:1}; o.toString(); //"[Object Object]"

    null.toString(); //报错:"TypeError: Cannot read property 'toString' of null" (可使用强制转换函数String(),String(null); //"null" )

    undefined.toString(); //报错 "TypeError: Cannot read property 'toString' of undefined(可使用强制转换函数String(),String(undefined); //"undefined" )

    三、typeof

    typeof检测变量的类型,可以返回的类型有6种,分别示例如下:

    typeof 123; //"number"

    typeof "hello"; //"string"

    typeof true; //"boolean"

    typeof undefined; //"undefined"

    typeof null; //"Object"

    typeof [1,2,3]; //"Object" 

    typeof function(){}; //"function" 

    typeof Number; typeof String; typeof Boolean; typeof Array; typeof Function; //都返回"function" 

    function Person(name) { this.name = name; } var person1 = new Person("sun_mile_rain"); typeof person1; //"Object"

    无论引用什么类型的对象,typeof操作符返回的都是"object",而instanceof操作符可以检测对象的确定类型,如“四、instanceof”中的例子所示。


    四、instanceof

    instantceof操作符可以确定对象的具体类型,而非笼统的"object",示例如下: 

    function Person(name) { this.name = name; } var person1 = new Person("sun_mile_rain");  person1 instanceof Person; //true

    function Person(name) { this.name = name; } var person1 = new Person("sun_mile_rain");  person1 instanceof Object; //true


           

  • 相关阅读:
    Gradle 10分钟上手指南
    java并发编程学习: 原子变量(CAS)
    java并发编程学习: 守护线程(Daemon Thread)
    java并发编程学习: 阻塞队列 使用 及 实现原理
    java并发编程学习: ThreadLocal使用及原理
    java并发编程学习:如何等待多个线程执行完成后再继续后续处理(synchronized、join、FutureTask、CyclicBarrier)
    ZooKeeper 笔记(5) ACL(Access Control List)访问控制列表
    gradle项目与maven项目相互转化
    rpc框架之 thrift连接池实现
    java并发编程学习:用 Semaphore (信号量)控制并发资源
  • 原文地址:https://www.cnblogs.com/sun-mile-rain/p/4026952.html
Copyright © 2011-2022 走看看