美文网首页js
Javascript 类型判断与转换

Javascript 类型判断与转换

作者: LenHong | 来源:发表于2019-02-26 15:46 被阅读0次

typeof vs instanceof

typeof 用来判断原始类型
instanceof 用来判断对象的类型

typeof对于原始类型来说,除了 null 都可以显示正确的类型

typeof 1 // 'number'
typeof '1' // 'string'
typeof undefined // 'undefined'
typeof true // 'boolean'
typeof Symbol() // 'symbol'
//typeof 对于对象来说,除了函数都会显示 object,所以说 typeof 并不能准确判断变量到底是什么类型

typeof [] // 'object'
typeof {} // 'object'
typeof console.log // 'function'

instanceof用来判断一个对象的正确类型,内部机制是通过原型链来判断的

const Person = function() {}
const p1 = new Person()
p1 instanceof Person // true

var str = 'hello world'
str instanceof String // false

var str1 = new String('hello world')
str1 instanceof String // true

类型转换

JS 中类型转换只有三种情况,分别是:

  • 转换为布尔值
  • 转换为字符串
  • 转换为数字

转Boolean

在条件判断时,除了 undefined, null, false, NaN, '', 0, -0,其他所有值都转为 true,包括所有对象。

转字符串

当某个操作或者运算需要字符串而该对象又不是字符串的时候,JS会自动调用 toString 函数转换为字符串类型

  • 如果 toString 方法存在并且返回原始类型,返回 toString 的结果。
  • 如果 toString 方法不存在或者返回的不是原始类型,调用 valueOf 方法,如果 valueOf 方法存在,并且返回原始类型数据,返回 valueOf 的结果。
  • 其他情况,抛出错误。
var obj = {name: 'Coco'};
var str = '123' + obj;
console.log(str);  // 123[object Object]

var arr = [1, 2];
var str = '123' + arr;
console.log(str); // 1231,2

转数字

与 String 类型转换相似,但是 Number 类型刚好反过来,先查询自身的 valueOf 方法,再查询自己 toString 方法:

  • 如果 valueOf 存在,且返回原始类型数据,返回 valueOf 的结果。
  • 如果 toString 存在,且返回原始类型数据,返回 toString 的结果。
  • 其他情况,抛出错误
var obj = {
    valueOf: function() {
        console.log('调用 valueOf');
        return 5;
    }
}
 
console.log(obj + 1);
// 调用 valueOf
// 6


var obj = {
    valueOf: function() {
        console.log('调用 valueOf');
        return {};
    },
    toString: function() {
        console.log('调用 toString');
        return 10;
    }
}
console.log(obj + 1);
// 调用 valueOf
// 调用 toString
// 11


var obj = {
    valueOf: function() {
        console.log('调用 valueOf');
        return {};
    },
    toString: function() {
        console.log('调用 toString');
        return {};
    }
}
console.log(obj + 1);
// 调用 valueOf
// 调用 toString
// Uncaught TypeError: Cannot convert object to primitive value

相关文章

  • Javascript 类型判断与转换

    typeof vs instanceof typeof 用来判断原始类型instanceof 用来判断对象的类型 ...

  • JavaScript-6控制流和循环

    JavaScript-if注意点 对于非布尔类型的数据, 会先转换成布尔类型再判断 对于==/===判断, 将常量...

  • 类型判断is 与 类型转换as

    在Swift中,通常使用is和as操作符来实现类型检查和转换。下面通过样例来演示使用方法,首先定义几个类。原文出自...

  • JavaScript类型系统,类型转换以及类型判断

    前言: JavaScript是一种弱类型语言,变量的类型是不确定的,关于变量类型的坑比较多,本文对这些内容归纳总结...

  • Swift - 类型判断is 与 类型转换as

    在Swift中,通常使用is和as操作符来实现类型检查和转换。下面通过样例来演示使用方法,首先定义几个类。 1、i...

  • javascript类型转换

    从原理上讲一下 javascript 的隐式类型转换,10分钟学会类型判断原理。 内置七种基本类型 null un...

  • js 总结四 07-12

    switch typeof判断类型 类型转换

  • 2018-07-02

    数据类型 与 类型转换 javascript语言的数据类型 数值(number):整数和小数(比如1和3.14) ...

  • 2019-02-19

    Javascript_03 数据类型转换、数据类型判断、作用域及let和var的区别、逻辑运算符 一、复习(数据类...

  • javascript强制类型转换

    javascript强制类型转换 一、转换为数值类型 Number(参数) 把任何类型转换为数值类型A.如果是布尔...

网友评论

    本文标题:Javascript 类型判断与转换

    本文链接:https://www.haomeiwen.com/subject/nsfxsqtx.html