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

萧山网站制作公司作品集网站代码

萧山网站制作公司,作品集网站代码,莆田制作网站企业,苏州外贸公司网站建设流程图我是目录 引言内置类型undefined与nullnull和undefined的区别字符串转换为字符串数字0.1+0.2不等于0.3NaNBigInt大数相加问题原生函数(封箱与解封)判断类型的方法typeofinstanceofObject.prototype.toString.callconstructor类型转换toStringtoNumbertoBoolean显式强制类型转…

我是目录

  • 引言
  • 内置类型
  • undefined与null
    • null和undefined的区别
  • 字符串
    • 转换为字符串
  • 数字
    • 0.1+0.2不等于0.3
    • NaN
  • BigInt
    • 大数相加问题
  • 原生函数(封箱与解封)
  • 判断类型的方法
    • typeof
    • instanceof
    • Object.prototype.toString.call
    • constructor
  • 类型转换
    • toString
    • toNumber
    • toBoolean
    • 显式强制类型转换
      • 字符串和数字
      • 显式转换布尔值
    • 隐式强制类型转换
      • 字符串和数字
      • 转成布尔值
      • 宽松相等和严格相等
      • 结论

引言

类型的相关知识包含内置类型的判断、类型转换、基础类型的装箱与开箱等,面试时候作为基础知识考察。但是最常被问到的是JS有几种类型,你敢信。。。

内置类型

JavaScript 目前有八种内置类型:

  • 空值(null)
  • 未定义(undefined)
  • 布尔值( boolean)
  • 数字(number)
  • 字符串(string)
  • 对象(object)
  • 符号(symbol, ES6 中新增)
  • 大整数(BigInt,ES2020新增)

除对象之外,其他统称为基本类型原始类型;对象被称为引用类型
在对象(object)中,包含了常用的数组(array)、函数(function)、map、set等。

undefined与null

undefined是全局对象的一个属性,也就是说,它是全局作用域的一个变量。 理论上,undefined 是一个不能被配置(non-configurable),不能被重写(non-writable)的属性。已在作用域中声明但还没有赋值的变量为 undefined

null 不是全局对象的属性。相反,null 是表示缺少的标识,它通常表示一个变量应该是一个对象,但是目前还未指向任何对象。

null和undefined的区别

  1. undefined是全局对象的一个属性,null不是
  2. undefined是一个标识符,可以被当作变量来使用和赋值(不要这么干),null不可以
var undefined = 1 // 不会报错,虽然值还是undefined
var null = 1 // 报错,null是关键字,不能赋值
  1. undefined 一般指代一个声明了但未赋值的变量,null一般指代一个声明了但是没有任何指向的对象
typeof undefined // 'undefined'
typeof null // 'object'

字符串

JavaScript 中字符串是不可变的,这是指字符串的成员函数不会改变其原始值,而是创建并返回一个新的字符串。
许多数组函数用来处理字符串很方便。虽然字符串没有这些函数,但可以通过“借用”数组的非变更方法来处理字符串。

var a = "foo";
var b = ["f","o","o"];
a.length; // 3
b.length; // 3
a.indexOf( "o" ); // 1
b.indexOf( "o" ); // 1
var c = a.concat( "bar" ); // "foobar"
var d = b.concat( ["b","a","r"] ); // ["f","o","o","b","a","r"]
a === c; // false
b === d; // false
var c = Array.prototype.join.call( a, "-" );
var d = Array.prototype.map.call( a, function(v){return v.toUpperCase() + ".";
} ).join( "" );
c; // "f-o-o"
d; // "F.O.O."

转换为字符串

将其他类型转换为字符串有两个比较重要的方法:

  • toString():这是一个方法,数值、布尔值、对象和字符串值都有toString()方法。
  • String():这是一个全局函数,适用于所有数据类型

数字

JavaScript 中的数字类型是基于 IEEE 754 标准来实现的,该标准通常也被称为“浮点数”。 JavaScript 使用的是“双精
度”格式(即 64 位二进制)。JavaScript 中的“整数”就是没有小数的十进制数。所以 42.0 即等同于“整数” 42。
由于数字值可以使用 Number 对象进行封装,因此数字值可以调用 Number.prototype 中的方法。

0.1+0.2不等于0.3

二进制浮点数最大的问题(不仅 JavaScript,所有遵循 IEEE 754 规范的语言都是如此),是会出现如下情况:

0.1 + 0.2 === 0.3; // false

那么应该怎样来判断 0.1 + 0.2 和 0.3 是否相等呢?
最常见的方法是设置一个误差范围值,通常称为“机器精度”( machine epsilon), 对JavaScript 的数字来说,这个值通常是 2^-52 (2.220446049250313e-16)。

可以使用 Number.EPSILON 来比较两个数字是否相等(在指定的误差范围内):

function numbersCloseEnoughToEqual(n1,n2) {return Math.abs( n1 - n2 ) < Number.EPSILON;
}
var a = 0.1 + 0.2;
var b = 0.3;
numbersCloseEnoughToEqual( a, b ); // true
numbersCloseEnoughToEqual( 0.0000001, 0.0000002 ); // false

NaN

NaN被称为不是数字的数字,用于指出数字类型中的错误情况,即“执行数学运算没有成功,这是失败后返回的结果”。

var a = 2 / "foo"; // NaN
typeof a === "number"; // true
a === NaN; // false

NaN 是一个特殊值,它和自身不相等。如果想要判断是否为NaN,可以使用isNaN函数。
ES5时,isNaN存在bug,在ES6中可以使用Number.isNaN来判断NaN

//ES5
var a = 2 / "foo";
var b = "foo";
a; // NaN
b; "foo"
window.isNaN( a ); // true
window.isNaN( b ); // true——晕!
//ES6
Number.isNaN( a ); // true
Number.isNaN( b ); // false——好!

BigInt

BigInt提供了一种方法来表示大于 2^53 - 1 的整数。这原本是 Javascript 中可以用 Number 表示的最大数字。BigInt 可以表示任意大的整数。
可以用在一个整数字面量后面加 n 的方式定义一个 BigInt ,如:10n,或者调用函数 BigInt()(但不包含 new 运算符)并传递一个整数值或字符串值。
它在某些方面类似于 Number ,但是也有几个关键的不同点:

  • 不能用于 Math 对象中的方法;
  • 不能和任何 Number 实例混合运算,两者必须转换成同一种类型。在两种类型来回转换时要小心,因为 BigInt 变量在转换成 Number 变量时可能会丢失精度。

BigIntNumber 不是严格相等的,但是宽松相等的。

0n === 0;
// false0n == 0;
// true

大数相加问题

Number.MAX_SAFE_INTEGER; // 9007199254740991

当两个数据相加时,其中一个或者两个数据都超过了Number.MAX_SAFE_INTEGER,直接相加结果就会不准了。这就是人们常说的大数相加问题。

一般的做法是转成逐位相加,转成字符串:

function largeNumAdd(num1, num2) {let maxLength = Math.max(num1.length, num2.length);//num1和num2位数对齐,位数较小的前面补0num1 = num1.padStart(maxLength, '0');num2 = num2.padStart
http://www.yayakq.cn/news/194410/

相关文章:

  • 企业网站制作公司电话博创安泰网站建设
  • 山东前十名建筑设计院seo教程搜索引擎优化入门与进阶
  • 秦皇岛网站制作代理商网站后台可以备份吗
  • 网站开发的国内外研究现状企业网络营销现状报告
  • 网站如何被收录情况网络建设方案模板
  • 网站的技术分析建设电子商务网站总体设计阶段
  • 开利网络企业网站建设第一品牌网站建设工作部署会
  • 做后台财务系统网站开发棋牌游戏软件需要多少钱
  • 电商网站建设讯息网站不设置关键词描述
  • 芗城网站建设推荐 官网 潍坊网站建设
  • 郑州网站建设创业傻瓜式网站制作软件
  • 哪个网站注册域名便宜网络项目推广平台
  • 襄阳手机网站建设公司h5响应式网站公司
  • 那可以做网站济南网站建设认可搜点网络能
  • 网站制作有哪些创新网站设计精美案例
  • i57500网站开发企业网站推广方案
  • 购物网站后台模板有保障的无锡网站制作
  • 微信的微网站是什么自建网站如何备案
  • 深圳优化网站公司微信扫描 WordPress
  • 网站重新设计需要多久免费建设视频网站
  • 家具设计师培训网站推广关键词排名优化
  • 微网站和网站同步像素网站建设如何商谈
  • 天河营销型网站建设广告设计与制作主修课程有哪些
  • 做网站的科技公司帐号登录
  • 深圳快速网站制作北京市网站公司
  • 提高网站权重的方法wordpress客户端登录
  • 音乐网站开发编程语言合肥网站建设公司
  • 上饶市建设培训中心网站网站本地化怎么做
  • 广东网站建设电话咨询营销推广方式有哪些
  • 庆网站制作公司wordpress子主题空白