前端-数据类型合集 持续更新

1.非Number类型和Number类型相比较

把非Number类型隐式转化为Number类型

"10" >9       //true   

字符串10在和Number类型比较时会被隐式转化成Number类型

2.字符串与字符串相比较

字符串与字符串比较比的是ACSII码值

console.log("我" > "你")    //返回true   

在ACSII码表里面我的数值要比你的数值大一些

3.比较运算符==

两边类型相同  可以直接进行比较

NaN == NaN   //返回false

两边类型不同   需要把非Number类型隐式转化为Number类型
"10" == 10   //返回true

4.===

如果两边类型不同直接返回false

5.例举3种强制类型转换和2种隐式类型转换

parseInt()			//parseInt() 函数可解析一个字符串,并返回一个整数
parseFloat()		//parseFloat() 函数可解析一个字符串,并返回一个浮点数
Number()			//Number() 函数把对象的值转换为数字

== 
+

6.JS的typeof返回哪种数据类型

基本数据类型:String,boolean,Number,Undefined, Null,; 

引用数据类型:Object(Array,Date,RegExp,Function)

7.如何判断某变量是否为数组数据类型

使用Array.isArray

​	if(typeof Array.isArray==="undefined")
{
  Array.isArray = function(arg){return Object.prototype.toString.call(arg)==="[object Array]"};  
}

8.数据类型-null和undefined的区别

    null是一个表示"无"的对象,转为数值时为0;
    undefined是一个表示"无"的原始值,转为数值时为NaN。



    当声明的变量还未被初始化时,变量的默认值为undefined。 
    null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。
    undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。

典型用法是:

    (1)变量被声明了,但没有赋值时,就等于undefined。
    (2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
    (3)对象没有赋值的属性,该属性的值为undefined。
    (4)函数没有返回值时,默认返回undefined。

     undefined会在以下三种情况下产生:

    a、一个变量定义了却没有被赋值

    b、想要获取一个对象上不存在的属性或者方法:

    c、一个数组中没有被赋值的元素

    null表示"没有对象",即该处不应该有值。

典型用法是:

    (1) 作为函数的参数,表示该函数的参数不是对象。
    (2) 作为对象原型链的终点

    undefined   表示不存在这个值。
    typeof undefined //"undefined"
    undefined :是一个表示"无"的原始值或者说表示"缺少值",就是此处应该有一个值,
    但是还没有定义。当尝试读取时会返回 undefined;
    例如变量被声明了,但没有赋值时,就等于undefined
    typeof null //"object"
    null        表示一个对象被定义了,值为“空值”;
    null : 是一个对象(空对象, 没有任何属性和方法);
    例如作为函数的参数,表示该函数的参数不是对象;

    注意:
    在验证null时,一定要使用 === ,因为 == 无法分别 null 

9.介绍js的基本数据类型

Boolean Number String  Undefined Null

JavaScript有几种类型的值?,你能画一下他们的内存图吗

栈:原始数据类型(Undefined,Null,Boolean,Number、String)
堆:引用数据类型(对象、数组和函数)

10.类型判断用到哪些方法

typeof
instanceof

11.介绍js有哪些内置对象

Object 是 JavaScript 中所有对象的父对象  

数据封装类对象:Object、Array、Boolean、Number 和 String    

其他对象:Function、Arguments、Math、Date、RegExp、Error

12.如何区分数组和对象

1、从原型入手,Array.prototype.isPrototypeOf(obj);  
利用isPrototypeOf()方法,判定Array是不是在obj的原型链中,
如果是,则返回true,否则false。Array.prototype.isPrototype([]) //true

2、也可以从构造函数入手,利用对向的constructor属性

3、根据对象的class属性(类属性),跨原型链调用toString()方法。
Object.prototype.toString.call(Window);

4、Array.isArray()方法

13.类型判断用到哪些方法

typeof

typeof xxx得到的值有以下几种类型:
undefined boolean number string object function、symbol ,
这里需要注意的有三点:

 typeof null结果是object ,
 实际这是typeof的一个bug,null是原始值, 非引用类型
 typeof [1, 2]结果是object,结果中没有array这一项,
 引用类型除了function其他的全部都是object
 typeof Symbol() 用typeof获取symbol类型的值得到的是symbol,
 这是 ES6 新增的知识点

instanceof

用于实例和构造函数的对应。例如判断一个变量是否是数组,使用typeof无法判断,
但可以使用[1, 2] instanceof Array来判断。因为,[1, 2]是数组,
它的构造函数就是Array。
同理:
function Foo(name) {
   this.name = name
}
var foo = new Foo('bar’)
console.log(foo instanceof Foo) // true

14.JavaScript有几种类型的值画一下他们的内存图

栈:原始数据类型(Undefined,Null,Boolean,Number、String)

堆:引用数据类型(对象、数组和函数)

 

两种类型的区别是:存储位置不同;

1,原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,
属于被频繁使用数据,所以放入栈中存储;

2,引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定,如果存储在栈中,
将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址
当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体

 

在参数传递方式上,原始类型是按值传递,引用类型是按共享传递

 

JS 中这种设计的原因是:按值传递的类型,复制一份存入栈内存,
这类类型一般不占用太多内存,而且按值传递保证了其访问速度。按共享传递的类型,
是复制其引用,而不是整个复制其值(C 语言中的指针),
保证过大的对象等不会因为不停复制内容而造成内存的浪费。

15.== 和 === 的区别

 1.===:三个等号我们称为等同符,当等号两边的值为相同类型的时候,直接比较等号两边的值,值相同则返回true,若等号两边的值类型不同时直接返回false。

     例:

100=“100”   //返回false
abc=“abc”   //返回false
 ‘abc’=“abc”  //返回true
NaN=NaN   //返回false
 false===false  //返回true

2.==:两个等号我们称为等值符,当等号两边的值为相同类型时比较值是否相同,类型不同时会发生类型的自动转换,转换为相同的类型后再作比较。
类型转换规则:

1)如果等号两边是boolean、string、number三者中任意两者进行比较时,优先转换为数字进行比较。
 2)如果等号两边出现了null或undefined,null和undefined除了和自己相等,就彼此相等
     例:

 100“100”    //返回true
 1true          //返回true
“1”“01”      //返回false,此处等号两边值得类型相同,不要再转换类型了!!
 NaNNaN  //返回false,NaN和所有值包括自己都不相等。 

     ==比较规则:
     数组与数值进行比较,会先转成数值,再进行比较;
     与字符串进行比较,会先转成字符串,再进行比较;
     与布尔值进行比较,两个运算子都会先转成数值,然后再进行比较。



    相等运算符(==)隐藏的类型转换,会带来一些违反直觉的结果,下面整理一些:
    
    0 == ''             // true
    0 == '0'            // true
     
    2 == true           // false
    2 == false          // false
     
    false == 'false'    // false
    false == '0'        // true
     
    false == undefined  // false
    false == null       // false
    null == undefined   // true
     
    ' \t\r\n ' == 0     // true
    \t \r \n都是转义字符,空格就是单纯的空格,输入时可以输入空格
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zmmsdk15225185085

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值