• 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


           

  • 相关阅读:
    自定义UITableViewCell
    使用NSOperation实现异步下载
    iOS中判断一个文件夹是否存在
    iphone下载进度条,显示下载字节数与百分比
    NSURLConnection下载文件并显示进度(HEAD)
    iphone 模拟器 显示 隐藏的资源库
    iOS使用NSURLConnection发送同步和异步HTTP Request
    NSFileManager和NSFileHandle(附:获取文件大小 )
    xcode4.2设立Created by &MyCompanyName_
    iphone开发之轻松搞定原生socket 编程,阻塞与非阻塞,收发自如
  • 原文地址:https://www.cnblogs.com/sun-mile-rain/p/4026952.html
Copyright © 2020-2023  润新知