https://segmentfault.com/a/1190000016300245
var bar=true
console.log('2'+['ko',1])
//输出结果如下:
2ko,1
javascript的几种基本类型?
JavaScript 中共有七种内置数据类型,包括基本类型和对象类型。
基本类型(存放在栈内存中,这里的字符串也是,跟Java有所区别)
基本类型分为以下六种:
string(字符串)
boolean(布尔值)
number(数字)
symbol(符号)
null(空值)
undefined(未定义)
注意:
1.string 、number 、boolean 和 null undefined 这五种类型统称为原始类型(Primitive),表示不能再细分下去的基本类型
2.symbol是ES6中新增的数据类型,symbol 表示独一无二的值,通过 Symbol 函数调用生成,由于生成的 symbol 值为原始类型,所以 Symbol 函数不能使用 new 调用;
3.null 和 undefined 通常被认为是特殊值,这两种类型的值唯一,就是其本身。
对象类型(对象存在于堆内存中)
对象类型也叫引用类型,array和function是对象的子类型。对象在逻辑上是属性的无序集合,是存放各种值的容器。对象值存储的是引用地址,所以和基本类型值不可变的特性不同,对象值是可变的
js弱类型语言
面试官问:说说你对javascript是弱类型语言的理解?
JavaScript 是弱类型语言,而且JavaScript 声明变量的时候并没有预先确定的类型, 变量的类型就是其值的类型,也就是说变量当前的类型由其值所决定,夸张点说上一秒种的String,下一秒可能就是个Number类型了,这个过程可能就进行了某些操作发生了强制类型转换。虽然弱类型的这种不需要预先确定类型的特性给我们带来了便利,同时也会给我们带来困扰。为了能充分利用该特性就必须掌握类型转换的原理
js中的强制转换规则
面试官问:javascript中强制类型转换是一个非常易出现bug的点,知道强制转换时候的规则吗?
ToPrimitive(转换为原始值)
ToPrimitive对原始类型不发生转换处理,只针对引用类型(object)的,其目的是将引用类型(object)转换为非对象类型,也就是原始类型。
ToPrimitive 运算符接受一个值,和一个可选的 期望类型作参数。ToPrimitive 运算符将值转换为非对象类型,如果对象有能力被转换为不止一种原语类型,可以使用可选的 期望类型 来暗示那个类型。
转换后的结果原始类型是由期望类型决定的,期望类型其实就是我们传递的type。直接看下面比较清楚。 ToPrimitive方法大概长这么个样子具体如下。
/**
* @obj 需要转换的对象
* @type 期望转换为的原始数据类型,可选
*/
ToPrimitive(obj,type)
type不同值的说明
type为string:
1.先调用obj的toString方法,如果为原始值,则return,否则第2步
2.调用obj的valueOf方法,如果为原始值,则return,否则第3步
3.抛出TypeError 异常
type为number:
调用obj的valueOf方法,如果为原始值,则返回,否则下第2步
调用obj的toString方法,如果为原始值,则return,否则第3步
抛出TypeError 异常
type参数为空
1.该对象为Date,则type被设置为String
2.否则,type被设置为Number
总结:
1、在进行强转字符串类型时将优先调用toString方法,强转为数字时优先调用valueOf。
2、在有运算操作符的情况下,valueOf的优先级高于toString。
3.toString方法对于值类型数据使用而言,其效果相当于类型转换,将原类型转为字符串。
4.valueOf方法对于值类型数据使用而言,其效果将相当于返回原数据。
网友评论