当前位置: 首页 > news >正文

简约风格网站设计百度贴吧的互动社区

简约风格网站设计,百度贴吧的互动社区,番禺学校网站建设建议,潜山网站建设公司哪里有一、数据类型 1. JavaScript用哪些数据类型、它们有什么区别#xff1f; JavaScript共有八种数据类型#xff0c;分别包括5种基本数据类型和3种非基本数据类型。 基本数据类型#xff1a;Undefined、Null、Boolean、Number、String。非基本数据类型#xff1a;Object、S…一、数据类型 1. JavaScript用哪些数据类型、它们有什么区别 JavaScript共有八种数据类型分别包括5种基本数据类型和3种非基本数据类型。 基本数据类型Undefined、Null、Boolean、Number、String。非基本数据类型Object、Symbol、BigInt。 其中Symbol和BigInt是ES6新增的数据类型 Symbol代表创建后独一无二且不可变的数据类型它主要是为了解决可能出现的全局变量冲突的问题。BigInt是一种数字类型的数据它可以表示任意精度格式的整数使用BigInt可以安全地存储和大整数即使这个数超出了Number的安全整数范围。 区别一分为原始数据类型和引用数据类型。 原始数据类型Undefined、Null、Boolean、Number、String。引用数据类型Object。另外还有数组Array和函数Function。 区别二存储位置不同。 原始数据类型直接存储在**栈stack**中往往占据空间小、大小固定、属于被频繁使用数据所以放在栈中。引用数据类型存储在**堆heap**中往往占据空间大、大小不固定如果存在栈中将会影响程序运行的性能。因此引用数据类型在栈中存储了指针指针指向堆中该实体的起始地址。当解释器寻找引用值时会先检索其在栈中的地址再根据地址从堆中获得实体。 扩展知识堆与栈 堆和栈的概念存在于数据结构和操作系统内存中。 在数据结构中 栈先进后出堆先进先出 在操作系统中分为堆区和栈区 栈区内存由编译器自动分配释放存放函数的参数值局部变量的值等。操作方式类似于数据结构中的栈。堆区内存一般由开发者分配释放若开发者不释放程序结束时可能由垃圾回收机制回收。 2. 数据类型的检测方式有哪些详细讲讲 2.1 typeof // 1.typeof 数组、对象和null都会被视为object 其他类型都判定正确 console.log(typeof {}); // object console.log(typeof []); // object console.log(typeof null); // object console.log(typeof function () {}); // function console.log(typeof 1); // number console.log(typeof true); // boolean console.log(typeof str); // string console.log(typeof undefined); // undefined console.log(typeof Symbol()); // symbol console.log(typeof NaN) // number根据上面的结果可以看到数组、对象和null都会被视为object其他类型都能判定正确。 2.2 instanceof 它的原理是判断在其原型链中能否找到该类型的原型 console.log(2 instanceof Number); // false console.log(true instanceof Boolean); // false console.log(str instanceof String); // falseconsole.log([] instanceof Array); // true console.log(function () {} instanceof Function); // true console.log({} instanceof Object); // true console.log(null instanceof Object); // false 这是因为null是原型链的尽头 它没有后续原型链 更不可能找到Object类型的原型根据上面的结果可以看到 instanceof只能正确判断引用类型基本数据类型无法判定。 需要注意的是null instanceof Object结果是false因为null是原型链的尽头它没有后续原型链更不可能找到Object类型的原型。 2.3 constructor 它的原理是**除了null之外任何对象都会在其prototype/__proto__上有一个constructor属性而constructor属性返回一个引用这个引用指向创建该对象的构造函数而Number、Boolean、String、Array都属于构造函数。**因此通过construct和构造函数就能判断类型是否符合。 console.log((2).constructor); // ƒ Number() { [native code] } Number构造函数 console.log((2).constructor Number); // true console.log((true).constructor Boolean); // true console.log((str).constructor String); // true console.log(([]).constructor Array); // true console.log((function () {}).constructor Function); // true console.log(({}).constructor Object); // true // console.log((null).constructor Object); // 会报错 原因是null不存在constructor // console.log((undefined).constructor Object); // 会报错 原因是undefined不存在constructor // console.log((null).constructor); // 会报错 // console.log((undefined).constructor); // 会报错从上面的结果看到constructor除了不能判断null和undefined外其它类型都能判断。 需要注意的是如果创建的对象的原型被改变了constructor就不能用来判断数据类型了。 function Fn() {} console.log(Fn.prototype.constructor); // f Fn() {} Fn.prototype new Array() console.log(Fn.prototype.constructor); // ƒ Array() { [native code] } let f new Fn(); console.log(f.constructor); // ƒ Array() { [native code] } console.log(f.__proto__); // ƒ Array() { [native code] } console.log(f.constructor Fn); // false console.log(f.constructor Array); // true扩展知识constructor的两个作用 判断数据类型。对象实例通过construct对象访问它的构造函数。 2.4 Object.prototype.toString.call() 它的原理是:对象原型上的toString方法会获取当前对象的类型然后返回[object Type]字符串由于部分内置对象对toString重写了因此需要调用.call()来利用原本的toString函数.call(args)方法实现让调用call方法的对象的this指向传的参数args。 let a Object.prototype.toString; console.log(a.call(2)); // [object Number] console.log(a.call(2) Number); // false console.log(a.call(2) [object Number]); // trueconsole.log(a.call(true)); // [object Boolean] console.log(a.call(true) Boolean); // false console.log(a.call(true) [object Boolean]); // trueconsole.log(a.call(str)); // [object String] console.log(a.call(str) String); // false console.log(a.call(str) [object String]); // trueconsole.log(a.call(new Date())); // [object Date] console.log(a.call(new Date()) Date); // false console.log(a.call(new Date()) [object Date]); // trueconsole.log(a.call([])); // [object Array] console.log(a.call(function () {})); // [object function] console.log(a.call({})); // [object Object] console.log(a.call(undefined)); // [object undefined] console.log(a.call(null)); // [object Null]通过上面代码可以看到Object.prototype.toString.call()可以验证任何类型。 2.5 封装一个类型验证的方法 大型项目中往往会使用Object.prototype.toString.call()封装一个isType方法来验证类型封装代码如下 function isType(data, type) {const typeObj {[object String]: string,[object Number]: number,[object Boolean]: boolean,[object Null]: null,[object Undefined]: undefined,[object Object]: object,[object Array]: array,[object Function]: function,[object Date]: date, // Object.prototype.toString.call(new Date())[object RegExp]: regExp,[object Map]: map,[object Set]: set,[object HTMLDivElement]: dom, // document.querySelector(#app)[object WeakMap]: weakMap,[object Window]: window, // Object.prototype.toString.call(window)[object Error]: error, // new Error(1)[object Arguments]: arguments,};let name Object.prototype.toString.call(data); // 借用Object.prototype.toString()获取数据类型let typeName typeObj[name] || 未知类型; // 匹配数据类型return typeName type; // 判断该数据类型是否为传入的类型 }下面我们可以测试一下封装结果 console.log(isType({}, object), // trueisType([], array), // trueisType(new Date(), object), // falseisType(new Date(), date) // true );2.6 总结 方法名效果typeof数组、对象和null都会被视为object其他类型都能判定正确instanceof只能正确判断引用类型基本数据类型无法判定constructor除了不能判断null和undefined外其它类型都能判断Object.prototype.toString.call()可以判断所有类型但是返回结果是字符串【最推荐封装isType】 3. 判断数组的方式有哪些 let arr []Object.prototype.toString.call(arr).slice(8,-1) Array 或者Object.protoType.toString.call(arr) [object Array]通过原型链判断:arr.__proto__ Array.prototype通过Array.isArray(arr)通过arr instanceof Array 4. null、undefined、Null有什么区别 含义不同undefined代表的含义是未定义而null代表的含义是空对象NaN表示不是一个数字用于指出数字类型中的错误情况通过执行数学运算没有成功时返回NaN。。初始化场景不同通常变量声明了但还没有定义的时候使用undefinednull主要用在初始化一些可能会返回对象的变量NaN不用于初始化。typeof判断结果不同typeof undefined返回undefinedtypeof null返回objecttypeof NaN返回number。 一般变量声明了但还没定义的时候会返回undefined。 需要注意的是 使用null undefined 返回true,null undefined返回false。 NaN与自身不相等NaN NaN和NaN NaN得到的结果都是false。 5. 为什么0.10.2 ! 0.3,怎么才能让它们相等 大白话 首先因此js将数据转为二进制后处理数据【要点一】0.1转化为二进制为0.0001 1001 1001 1001无限循环..0.2转化为二进制为0.001 1001 1001 1001(无限循环)。 又因为js的Number类型遵循IEEE754标准64位存储【要点二】IEEE754标准64位内只有52位来表示小数有很多小数转为二进制后存储无限位数如果第53位为1的话只保留52为就会进位【要点三】从而导致精度丢失【第一次精度丢失】。 而后进行二进制相加的时候也可能会存在进位的问题进而导致精度丢失【第二次精度丢失】最后相加得到的二进制结果转化为数字就会与我们平常相加得到的结果有偏差。 解决方法 将两数转换为整数在相加后转回小数 let x (0.1 * 10 0.2 * 10) / 10 console.log(x 0.3) // true使用toFixed方法配合parseFloat方法 console.log(parseFloat((0.1 0.2).toFixed(1)) 0.3) // true根据真实结果减去预测结果是否小于Number.EPSILON 在ES6中提供了Number.EPSILON属性它的值为2^-52。 console.log((0.1 0.2) - 0.3 Number.EPSILON) // true下面详细讲讲 Number类型遵循的IEEE754 64位标准也就是双精度浮点数(double)存储它为每个数值分配64位存储空间以科学计数法的方式存储。64位分配如下1位符号位11位指数位剩余52位为小数位。 这里以0.1为例 6. 操作符的强制转换规则是怎么样的 在比对双方类型不一样时会进行类型转换。 其中包括 string转为numberboolean转为numberobject转为字符串[object Object] 判断流程如下 先判断两者类型是否相同同则比较大小不同进行类型转换先判断是否在比对null和undefined是的话返回true接着按上述三个点的顺序类型转化
http://www.hkea.cn/news/14330228/

相关文章:

  • 文昌市建设局网站沈阳建设工程信息网官网 安全中项网
  • 制作一个景点介绍的网站html长沙做网站咨询公司
  • 网站编程好学吗个人养老金制度将推
  • 站长之家seo工具化妆品 网站建设案例
  • 网站开发项目具体的流程网站页面设计公司电话
  • 东莞宣传网站python基础教程for循环
  • 无锡网站建设 百家号公司企业网站程序下载
  • 品牌网站应该怎么做厦门做网站多
  • 内江 网站建设网站系统管理员模块
  • 青海网站建设优化花生壳网站无法登陆
  • 备案成功后怎么建设网站旅行社的网站建设
  • 桂林旅游网站制作阿里云无主体新增网站
  • 城市建设网站鹤岗市连云港优化推广
  • 南充建网站的资料长沙网站定制建设
  • 贵州省建设厅报名网站域名服务网站建设科技公司
  • 常用的网页编辑软件有哪些网站自然优化自学
  • 网站建设的好处有什么用wordpress怎样弄pdf
  • 网站整体优化产品开发流程8个步骤的总结
  • 亚马逊电商网站银川seo
  • 营销型网站建设需要注意什么网站建设方案的摘要
  • 网站建设免费课程怎么做网站备份
  • 奉贤做网站站长统计在线观看
  • 深圳 网站设拼多多网站怎么做
  • 手机网站后台源码自己做培训网站
  • 手机社交网站模板长春建工集团官网
  • wordpress手机版安装wordpress seo教程
  • 图书拍卖网站开发遇到的问题微信里的小程序怎么制作方法
  • 网站优化的作业及意义微信端微网站怎么做
  • php做的网站怎么运行wordpress.org配置
  • 做一个网站的流程oppo软件商店