精华内容
下载资源
问答
  • Educoder题目:JavaScript 学习手册二:JS 数据类型答案解析.md
  • 本文实例讲述了JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别。分享给大家供大家参考,具体如下: js数据类型:基本数据类型和引用数据类型(文章最下面会介绍各类型的基础以及注意事项) 基本数据类型指...
  • 本文主要介绍了Javascript的基本数据类型数据类型的转换规则。具有很好的参考价值,需要的朋友可以看下
  • JavaScript 数据类型总结及相关面试题

    千次阅读 2020-09-22 17:21:43
    JavaScript数据类型 基本数据类型 number string boolean null undefined symbol bigint 引用数据类型 object 普通对象 数组对象 正则对象 日期对象 Math数学函数对象 … function 数据类型检测 typeof ...

    JavaScript数据类型

    • 基本数据类型
    • number
      • NaN
      • Infinity
    • string
    • boolean
    • null
    • undefined
    • symbol
      • static Symbol
      • Symbol.prototype
    • bigint
    • 引用数据类型
    • object
      • 普通对象
      • 数组对象
      • 正则对象
      • 日期对象
      • Math数学函数对象
      • JSON对象
      • Set
      • Map
    • function
      • 普通函数
      • 箭头函数
      • 构造函数
      • 生成器函数
      • 匿名函数
      • 自调用函数

    数据类型检测

    • typeof 检测数据类型的逻辑运算符
    • instanceof 检测是否为类的实例
    • constructor 检测构造函数
    • Object.prototype.toString.call 检测数据类型

    typeof [value] 返回当前值的数据类型,返回的数据类型是字符串

    • 返回的结果都是字符串
    • 局限性:
      • typeof null => “object” 类型
      • typeof 不能细分对象类型(检测普通对象或数组对象等都是返回"object")
    • 原理:
      • 所有的数据类型值在计算机中都是按照“二进制”进行存储
      • null的二进制值是“000000”
      • 只要是对象都是以“000”开始的
      • typeof检测时是按照计算机存储的二进制值来检测的,所以检测null时也是返回“object”

    把其它数据类型转换为数字的方法:

    • 强转换(基于底层机制转换) Number(value)
      • 一些隐式转换是基于Number完成的
        • isNaN(‘12px’) 先把其它类型值转换为数字再检测
        • 数学运算 “12px” - 13
        • 字符串 == 数字 两个等于号比较很多时候也是要把其它类型值转换为数字
    • 弱转换(基于额外的方法转换)parseInt(value)/parseFloat(value)

    数据类型转换及面试题:

    • typeof
    let a = typeof typeof typeof [12,23]
    console.log(a) //"string"
    /* 步骤分析
     * typeof [12,23]  => "object"
     * typeof "object" => "string"
     * typeof "string" => "string"
    */
    
    • NaN 跟任何值都不相等,包括它自己,与任何值相加都是NaN
    let res = parseFloat("left:200px");
    if(res === 200){
    	alert(200);
    }else if(res === NaN){
    	alert(NaN)
    }else if(typeof res === "number"){
    	alert("number")
    }else{
    	alert("Invalid Number")
    }
    //结果:字符串number => 'number'
    
    • 类型转换规则
    • parseInt/parseFloat 处理的值是字符串,先从字符串左侧开始查找有效数字字符(遇到非有效数字字符则停止查找) 如果处理的值不是字 符串,需要先转换为字符串然后再开始在开始查找
    • parseInt([value],[radix])传2个参数的转换规则:
      • [radix]表示是一个进制,不写或者写0默认都是按照10进制处理,(特殊情况:如果value是以0x开头则默认是16进制)
      • 进制有一个取值范围:2-36之间,如果不在这个范围内,则转换结果一定是NaN
      • 把value看做是radix进制,最后把radix进制转换为10进制
    • Number 直接调用浏览器最底层的数据类型检测机制来完成
      + true 1 flase 0
      + null 0 undefined NaN
      + 字符串中必须保证都是有效数字才会转换为数字,否则都是NaN
    • == 两个等号比较时
      + 对象==字符串,对象转换为字符串
      + null == undefined 返回true (===返回false),但是和其它值都不相等
      + 0 == null 返回false null和undefined在进行等号比较时不进行数据类型转换
      + 其余两边不同都转换为数字
    • === 三个等号比较时:两边类型一致,值也一致才相等,类型不一样直接不对等,不会转换
    • 0 NaN null undefined “” 转换为布尔类型都是false,其余的都是true
    • 对象类型参与运算规则
    • 大括号与运算符结合:
      + 大括号在运算符前面并且没有小括号处理优先级,则不认为是数学运算,加了小括号后才会运算
      + 如果大括号出现在运算符后面则认为是数学运算
    • 普通对象toString()是调用Object.prototype.toString()用来检测数据类型的,返回’[object Object]’
    • 对象在做数学运算时的底层机制:
      • 先检测对象的Symbol.toPrimitive这个属性值,如果有则基于这个值运算,如果没有
      • 再检测对象的valueOf这个值【原始值:基本类型值】,如果有则基于这个值运算,如果没有
      • 再获取对象的toString方法,把其变为字符串,如果是‘+’处理,则看到字符串会变为字符串拼接
      • 如果最后想变为数字,则再把字符串转换为数字即可
    let obj = {
    	[Symbol.toPrimitive]:function(hint){
    		return 10;
    	},
    	valueOf:function(){
    		return 20;
    	},
    	toString:function(){
    		return 30;
    	}
    }
    
    console.log(10 + obj);
    
    parseInt('') // NaN 从最左侧查找没有找到有效数字所以返回NaN
    Number('') // 0 
    isNaN('') // false 先把''转换为数字(隐式 Number)=> isNaN(0) 所以返回false
    parseInt(null) // NaN 先转换为字符串null parseInt('null')
    Number(null) // 0
    isNaN(null) // false isNaN(0)
    parseInt('12px') // 12
    Number('12px') // NaN 字符串中必须保证都是有效数字才会转换为数字,否则都是NaN
    isNaN('12px') // true isNaN(Number('12px')) => isNaN(NaN) => true
    parseFloat('1.6px')+parseInt('1.2px') + typeof parseInt(null) // "2.6number"  1.6 + 1 + typeof NaN => 1.6 + 1 + 'number'
    isNaN(Number(!!Number(parseInt("0.8")))) // false isNaN(Number(!!Number(0))) => isNaN(Number(false)) => isNaN(0)
    typeof !parseInt(null) + !isNaN(null); // 'booleantrue' typeof true + !flase  
    [] == true //false Number([]) == Number(true) 0 == 1
    10 + false + undefined + [] + 'Tencent' + null + true + {} // 'NanTencentnulltrue[object Object]'  10 + 0 + NaN + ''(对象转字符串) + 'Tencent' + 'null' + 'true' + {}.toString()('[object Object]') 
    [] == false // true 都转换为数字,[]先转换为字符串''然后再用Number('')转换为数字0,false转为数字也是0
    ![] == false // true 优先将![]转换为boolean值,[]转为布尔为true取反则为false
    {} + 0 // 0 这里会认为{}是代码块,没有进行运算,计算‘+0’
    ({}+0)  ({}) + 0 //[object Object]0
    0 + {} //0[object Object]
    
    let n = '10', m = 10;
    console.log(n + 10);//1010
    //console.log(+n);//10 如果+只有一边则把值转换为数字
    console.log(++n);//11 也是转换为数字然后自身加1
    console.log(+n);//11 因为上面已经加了1
    
    console.log({}+m);//[object Object]10
    let res = {} + m;
    console.log(res);//[object Object]10
    console.log(m+{});//10[object Object]
    
    console.log(m + new Number(10));//20 new Number(10).valueOf()的原始值是10
    
    
    var a = {}, b = '0',  c = 0;
    a[b] = 'hello';
    a[c] = 'world';
    console.log(a[b]); // world普通对象属性名只能是字符串,a[c] 也会变成a['0']
    
    var a = {}, b = Symbol('1'), c = Symbol('1');
    a[b] = 'hello';
    a[c] = 'world';
    console.log(a[b]); // hello Symbol是唯一值, Symbol('1') === Symbol('1')返回false
    
    var a = {}, b={n:'1'}, c={m:'2'};
    a[b] = 'hello';
    a[c] = 'world';
    console.log(a[b]); // world 对象不能作为属性名,转换为字符串变为[object Object]
    
    var a = {n: 1};
    var b = a;
    a.x = a = {n: 2};//可以拆分为: a.x = {n:2} a = {n:2}
    console.log(a.x); // undefined a已被重新赋值变为{n:2}
    console.log(b); // {n:1, x: {n:2}} b还是指向原来的堆内存地址,但是在第三步时堆内存中又增加了x:{n:2}
    
    var x = [12, 23];
    function fn(y){
    	y[0] = 100;
    	y = [100];
    	y[1] = 200;
    	console.log(y);// [100, 200]
    }
    
    fn(x);
    console.log(x); [100, 23]
    // 首先开辟一块堆内存保存 12,23 让x指向该地址
    // 在函数中把堆内存中的第一个值12变成了100
    // 然后又新开辟了一块堆内存保存新值100 并让y指向该地址
    // 在新的堆内存中新加了一个值200
    // 所以x所指向的地址中值变为了100,23
    // y所指向的地址中值是100,200
    
    var obj = {
    	name: 'hello',
    	fn: (function(name){
    		console.log(name);
    	})(obj.name);//这里会报错,因为先创建值在创建变量,此时变量obj还不存在
    }
    
    let arr = [10.18, 0, 10, 25, 23];
    arr = arr.map(parseInt);//这里会把value和index作为参数传递给回调函数parseInt
    console.log(arr);
    //分析
    parseInt('10.18', 0);
    //从字符串左侧第一个字符开始查找,找到符合[radix]进制的值(只要遇到不符合的则停止查找),把得到的值变为数字,再按照把[radix]转换为10进制的规则处理,结果为10
    parseInt('0', 1);//1不在进制范围内直接返回NaN
    parseInt('10', 2);//把10看做是二进制,最后再转为10进制。结果为:2
    parseInt('25', 3);// 把值看作是3进制,三进制应该是0,1,2 所以得到3进制的值为2,然后再转换为10进制。结果:2
    parseInt('23', 4);//把值看作是4进制,四进制应该是0,1,2,3 所以得到四进制的值为23,然后转换为10进制。结果:11
    
    • 其它进制转换为十进制的规则
    • 先将其它进制值的个十百千等拆分成单独的数
    • 然后由个位数乘以该进制的0次幂 + 十位数乘以该进制的1次幂 + 百位数乘以该进制的2次幂…以此类推
    • 最后相加得到的值就是十进制值,如上面代码中的4进制值23转为10进制就是:
      2x4^1 +
      3x4^0 = 8+3=11
    展开全文
  • JS数据类型转换.txt

    2020-03-22 23:24:46
    javascript中,变量可以赋予任何类型的值。但是运算符对数据类型是有要求的,如果运算符的类型与预期不符,就会自动转换类型。数据类型除了可以自动转换以外,还可以手动强制转换。
  • JavaScript数据类型 - Object类型

    千次阅读 2020-09-01 10:20:25
    ECMAScript中的对象其实就是一组数据和功能的集合。对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。而创建Object类型的实例并为其添加属性和方法,就可以创建自定义对象,如下所示: var o = new ...

    创建对象一

    ECMAScript中的对象其实就是一组数据和功能的集合。对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。而创建Object类型的实例并为其添加属性和方法,就可以创建自定义对象,如下所示:

    var o = new Object();
    o.name = "Alvin"; //添加属性
    //添加方法
    o.sayHello = function(){
        console.log("hello "+ this.name);
    }
    

    这个语法与Java中创建对象的语法相似,但在JavaScript中,如果不给构造函数传递参数,则可以省略后面的那一对圆括号。也就是说在像前面这个示例一样不传递参数的情况下,完全可以省略那对圆括号(但并不推荐这种做法)

    var o = new Object; //有效,但不推荐

    仅仅创建一个Object实例其实并没有什么用处,但关键是要理解一个重要思想:即在JavaScript中,Object类型是所有其它实例的基础,在讲继承的时候我们已经讲到:所有其它类型均继承自Object。也就是说Object类型所具有的任何属性和方法,同样也都存在于更具体的对象中。

    Object的每个实例都具有如下属性和方法:

    • Costructor:保存着用于创建对象的函数,对于上面的例子而言,构造函数(constructor)就是Object()
    • hasOwnProperty(propertyName):用于检查给定的属性在当前的实例对象(不是在实例原型)中是否存在。其中作为参数的属性名(propertName)必须以字符串形式指定,例如:o.hasOwnProperty("name")
    • isPropertyOf(object):用于检查传入的对象是否是另一个对象的原型
    • propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。与hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定。
    • toLocalString():返回对象的字符串表示形式,该字符串与执行环境的地区对应。
    • toString():返回对象的字符串表示形式。
    • valueOf():返回对象的字符串、数值或布尔值表示,通常与toString()方法的返回值相同。

    由于在JavaScript中Object是所有对象的基础,因此所有对象都具有这些基本的属性和方法。

    创建对象二

    另一种创建对象的方式是使用对象字面量的表示法。对象字面量是对象定义的一种简写形式。目的在于简化创建包含大量属性的对象的过程。看一下下面的例子:

    var person = {
        name: "Alvin", //添加name属性
        //添加sayHello方法
        sayHello:function(){
            console.log("Hello "+ this.name)
        }
    }

    在使用对象字面量时,属性名也可以使用字符串,如下所示:

    var person = {
        "name": "Alvin",     
        "Age": 28,
        5: true
    }

    在这个例子中我们创建了一个person对象,包含三个属性,name、age和5。但这里数值属性名会自动转换为字符串。

    另外,使用对象字面量语法时,如果花括号里面的内容为空,则可以在外面动态添加属性或方法,如下所示:

    var person = {}; //与new Object()相同
    person.name = "Alvin";
    person.sayHello = function(){
        console.log(this.name);
    }

    总结

    虽然可以使用前面介绍的任何一种方式创建对象,但平时我们更青睐使用对象字面量语法,因为这种语法要求的代码量少,而且能够给人封装数据的感觉。实际上对象字面量也是向函数传递大量可选参数的首先方式。看下面的例子:

    function dispalyInfo(args){
        var output = "";
        if(typeof args.name == "string"){
            output += "Name: " + args.name + "\n";
        }
    
        if(typeof args.age == 'number'){
            output += "Age: " + args.age + "\n";
        }
    
        console.log(output);
    }
    
    displayInfo({
        name: "Alvin",
        Age: 28
    });
    
    displayInfo({
        name: "yannis"
    });

    这个例子中,函数displayInfo接受一个名为args的参数,这个参数可能带有一个名为name或age的属性,也可能是两个属性都有或者是都没有。在函数内部,通过typeof操作符来检测每个属性是否存在,然后再基于相应的属性来显示信息。

    一般情况,访问对象的属性时都是使用点表示法,这也是很多面向对象语言的通用方法。但是在JavaScript中也可以用方括号像数组一样来访问属性。在使用方括号时,需将要访问的属性以字符串的形式放在方括号内。如下所示:

    console.log(person["name"]);
    console.log(person.name);

    以上两种方式都是可以的,从功能上看这两种访问方式没有任何区别。但方括号访问的主要有点事可以通过变量的形式来访问属性,例如:

    var proName = "name";
    console.log(person[proName]); //Alvin

    如果属性名中包含会导致语法错误的字符,或者属性名使用的是关键字或保留字,也可以使用方括号形式访问,如:

    person["first name"] = "Alvin";

    由于"first name"中包含空格,因此不能直接使用点的形式来访问。然而属性名中也可以包含非字母非数字,这时候就可以使用方括号的形式来访问它们了。

    通常,除非必须使用变量来访问属性,否则建议使用点表示法。

    展开全文
  • 数据类型 JavaScript中有5种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number和String。还有1种复杂数据类型——Object,Object本质上是由一组无序的名值对组成的。 typeof操作符 介于...
  • JavaScript中基本数据类型和引用数据类型是如何存储的呢?下面通过本文给大家分享js数据类型的存储方法,需要的朋友参考下吧
  • JS数据类型检测

    2018-08-21 21:31:13
    JavaScript中如何检测数据类型?有四种检测的方式: typeof:检测数据类型的运算符 instanceof : 检测某个实例是否属于这个类(什么是类) constructor: 获取当前实例的构造器 Object.prototype.toString.call :...
  • javascript 数据类型

    2017-08-02 19:50:15
    一种是基本数据类型 引用类型: 在js的世界里,有一句话“所有的一切,都是object”,那么问题来了。object是基本数据还是引用类型的呢? 嘿嘿,卖个关子,后面再讲,先来讲讲对于引用类型的定义: 引用...

    js真是一门有趣的语言。在js的世界中,数据有两种类型。


    一种是引用类型。一种是基本数据类型


    引用类型:

    在js的世界里,有一句话“所有的一切,都是object”,那么问题来了。object是基本数据还是引用类型的呢?
    嘿嘿,卖个关子,后面再讲,先来讲讲对于引用类型的定义:

    引用类型值则是指那些保存在堆内存中的对象,意思是变量中保存的实际上只是一个指针,这个指针指向内存中的另一个位置,该位置保存对象。

    意思就是我们的引用类型是一个日记本,当我们想知道2017年8月2日我们在干什么的时候,日记本的回答永远是在写博客,对吧。


    这时候,日记本中的2017年8月2日就是我们的引用类型了,也就是说这是个工具,一个指针我们村粗的位置


    引用类型有很多,最常见的是我们的ARRAY,FUNCTION,OBJECT等等

    基本数据

    基本数据类型的概念是:基本类型值指的是那些保存在栈内存中的简单数据段,即这种值完全保存在内存中的一个位置。

    意思就是我们查日记本,但是日记本怎么会知道我们那天干了什么?肯定是我们写过对吧,但是我们写的经历是哪儿来?


    我们写日记的本子是怎么来?这就是基本类型要做的事情了,也就是我们每次使用基本类型去操作,我们就会去“构建”一次


    那哪些才算基本类型?

    Undefined / Null / Boolean / Number / String

    没错,undefined也是基本类型

    一些代码,便于大家理解:

    String.prototype.valueOf = function() { console.log("string类别的valueof方法被调用了") }
    			var obj = { valueOf: function() { console.log("obj的valueof方法被调用了"); return 1 } }
    			var a1 = 1;
    			var a2 = new Number(1);
    			var a3 = Number(1);
    			var a = 1;
    			var b = "1";
    			var c = new String("1");
    			var d = String("1");
    			console.log("==================检测基本类型");
    			console.log(typeof b);
    			console.log(typeof c);
    			console.log(typeof d);
    			console.log("=======================检测引用类型")
    
    			console.log(b instanceof String);
    			console.log(c instanceof Object);
    			console.log(d instanceof String);
    			1 == b;
    			1 == c;
    			1 == d;
    			console.log(d === c);
    			console.log(b === c);
    			console.log(d === b);
    			console.log(typeof a1);
    			console.log(typeof a2);
    			console.log(typeof a3);
    			//			 Typeof操作符是检测基本类型的最佳工具;
    			//Instanceof用于检测引用类型,可以检测到具体的,它是什么类型的实例;

    这儿再提一点题外话。关于为什么叫基本类型,那是因为因为string比较特殊。string的定义是引用类型的,但其操作是值类型,

    所以在代码中才会出现我定义的那种情况

    对于堆内存还有栈内存,下篇博客再见


    展开全文
  • 欢迎大家关注,转发,加推荐给身边的同学啊!!!!!! 第一关 //请在此处编写代码 /********** Begin **********/ aType = typeof a; bType ='array'; cType = typeof c; dType = typeof d;... /*****.

    欢迎大家关注,转发,加推荐给身边的同学啊!!!!!!

    第一关

    	//请在此处编写代码
    	/********** Begin **********/
        aType = typeof a;
        bType ='array';
        cType = typeof c;
        dType = typeof d;
        eType = 'bool';
        fType = typeof f;
    	/********** End **********/
    

    第二关

    //请在此处编写代码
    	/********** Begin **********/
        var a=parseInt(args1);
        var b=parseInt(args2,16);
        var c=parseFloat(args3);
    	/********** End **********/
    

    好了,这就是全部了。
    没有关注公众号的同学可要赶快关注了啊!
    耗子尾汁!
    我是谁?
    马老师关门弟子
    我是和你们一样的在校大学生
    喜欢自媒体,喜欢分享
    关注我的公众号,获取更多资源
    欢迎你的加入!
    让我们一起学习!一起进步!!
    在这里插入图片描述

    展开全文
  • JavaScript中的数据类型   JavaScript中有七种数据类型,分别是number、string、boolean、symbol、undefined、null、object。我们所见到的数组以及函数等,并不是独立的一种数据类型,而是包含在object里的。 ...
  • 简述JavaScript数据类型

    2019-10-20 18:26:52
    众所周知,JavaScript是一种弱类型语言,因此数据类型JS里面就显得不太突出,在声明不同数据类型的变量时,无需在变量名之前写明数据类型名称,取而代之,需要写一个关键字var代替数据类型名称,浏览器会根据变量...
  • 3.1 基本数据类型 1.字符串类型(string) :由unicode字符、数字、标点符号组成,在...方法名() 3.3其它有数据类型 函数: 1.javascript中的函数是一种数据类型,因此,可以被存储在变量、数组或对象中。 2 null:
  • JS数据类型之基本数据类型

    万次阅读 多人点赞 2019-06-28 16:46:43
    1.JavaScript(以下简称js)的数据类型分为两种:原始类型(即基本数据类型)和对象类型(即引用数据类型); 2.js常用的基本数据类型包括undefined、null、number、boolean、string; 3.js的引用数据类型也就是...
  • 让我们一起来看下js常见的数据类型和背后的隐式转换逻辑。 ES5中有5种简单的数据类型(也叫基本数据类型):number,string,boolean,null,undefined(null和undefined是两种特殊的基本数据类型,下面会讲到);还有一种...
  • javascript数据类型详解

    2020-12-09 03:37:04
    一、六种数据类型 (弱类型数据) 1.基本数据类型(5种):Undefined、Null、Boolean、Number、String 2.引用数据类型(1种):Object 例如: Function Date Array … 在js中定义变量的时候无需指定类型。比如定义一个...
  • 用于创建和操作字节数组的Javascript数据类型 用法示例 import Struct from 'structs.js' var bottle = new Struct ( ) ; var label = bottle . push ( new Struct ( ) ) ; var content = bottle . push ( "B" , ...
  • 浮点数类型 小数类型 float ????有效数值: ※ 小数的位数可以是无穷; ※ 在计算机中,规定存储浮点数,是有限的,不能无限存储浮点数的小数位; ※ 在JavaScript语言中 浮点数,整数部分 + 小数部分 ...
  • NaN的意思是非数值,它的数据类型是数值类型。 var a = "a"; //字符串只要含有非数字就会转换为NaN,否则转换为数值 var a="101001"; var a="4.15a"; a = Number(a); //强制转换 a = parseInt(a); //转换为...
  • JavaScript数据类型 - Undefined类型

    千次阅读 2020-08-28 10:10:05
    Undefined 类型 Undefined类型只有一个值,即特殊的undefined。在使用var声明变量但未对其进行初始化时,这个变量的值就是undefined,例如: var message; console.log(message); //undefined var message = ...
  • 判断js数据类型的四种方法和原理

    千次阅读 多人点赞 2019-05-28 15:44:23
    怎么去判断一个数据属于哪个数据类型,这个是很常见的操作,我们一般都会想到typeof和instanceof这两个常见的方法,但有时候这两种方法并不能满足我们的需求。那让我们来看一下都有哪些可以判断数据类型的方法吧。 1...
  • 首先我们简单的说一下js中的几种数据类型数据类型分为基本类型和引用类型:基本类型:String、Number、Boolean、Null、Undefined引用类型:Object、Array、Date、Function、Error、RegExp、Math、Number、String、...
  • JavaScript数据类型 JavaScript是一种弱类型语言,在定义变量时不需要指定类型,一个变量可以存储任何类型的值。不过这并不等于JavaScript不区分数据类型,只不过在运算时,JavaScript能自动转换数据类型。但是在...
  • 主要为大家分享了JavaScript数据类型学习笔记,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 729,711
精华内容 291,884
关键字:

js数据类型