JavaScript 基础

JavaScript 基础

一、概念简介二、基本类型2.1 数值类型2.2 字符类型2.3 基本类型检测三、引用类型3.1 Object 类型3.2 Array 类型3.3 Date 类型3.4 Funcation 类型3.5 引用类型检测四、内置对象4.1 Global 对象4.2 window 对象五、作用域与闭包5.1 作用域5.2 作用域链5.3 闭包六、对象设计 6.1 数据属性6.2 访问器属性6.3 读取属性6.4 创建对象

一、概念简介

JavaScript 是一种专为与网页交互而设计的脚本语言,由以下三个部分组成:

  • ECMAScript:由 ECMA-262 定义,提供核心语言功能;
  • 文档对象模型 (DOM):提供访问和操作网页内容的方法和接口;
  • 浏览器对象模型 (BOM):提供与浏览器交互的方法和接口。

ECMAScript 提供了语言的核心功能,它定义了以下七种数据类型:

  • 六种基本数据类型:UndefinedNullBooleanNumberStringSymbol ( ES 6新增 );
  • 一种引用数据类型:统称为 Object 类型;具体又细分为 ObjectArrayDateRegExpFunction 等类型。另外和 Java 语言类似,对于布尔,数值,字符串等基本类型,分别存在其对应的包装类型 Boolean,Number,String,但通常我们并不会使用到这些包装类型,只需要使用其基本类型即可。

二、基本类型

2.1 数值类型

1. 进制数值

ECMAScript 中的 Number 支持以下三种常用进制:

  • 十进制:正常数值就是十进制;
  • 八进制:八进制字面值的第一位必须是零(0),然后是八进制数字序列(0~7);
  • 十六进制:十六进制字面值的前两位必须是 0x,后跟任意的十六进制数字(0~9 及 A~F)。
console.log(56); // 56 console.log(070); // 56 console.log(0x38); // 56

2. 浮点数值

ECMAScript 的数值类型同样支持浮点数,但是由于保存浮点数值需要的内存空间是保存整数值的两倍,因此 ECMAScript 会尽量将浮点数值转换为整数值存储:

var a = 10.0; console.log(a); // 10

和其他语言类似,浮点数中的数值也是不精准的,示例如下:

var a = 0.1; var b = 0.2;  a + b ; // 0.30000000000000004 a+b === 0.3 ; // false

如果想要对浮点数进行精确计算,可以使用 decimal.js , math.js 等第三方库。

3. 科学计数法

ECMAScript 支持使用科学计数法来表达数值:

8e-2 // 0.08 8e2 // 800

4. parseInt() \ parseFloat()

parseInt 可以用于解析字符串并返回整数,parseFloat 用于解析字符串并返回浮点数:

parseInt("56"); // 56 parseInt("0x38", 16); // 56 支持使用第二个参数来表示转换的进制 parseInt("56.6"); // 56  parseFloat("12.2"); // 12.2  parseInt("blue"); // NaN NaN用于表示一个本来要返回数值的操作却未返回数值的情况

5. toFixed()

toFixed 用于保留指定位数的小数,但需要注意的是其四舍五入的行为是不确定的:

1.35.toFixed(1) // 1.4 正确 1.335.toFixed(2) // 1.33 错误 1.3335.toFixed(3) // 1.333 错误 1.33335.toFixed(4) // 1.3334 正确 1.333335.toFixed(5) // 1.33333 错误 1.3333335.toFixed(6) // 1.333333 错误

想要解决这个问题,需要重写 toFixed 方法并通过判断最后一位是否大于或等于5来决定是否需要进位,具体代码如下:

// toFixed兼容方法
Number.prototype.toFixed = function(len){  if(len>20 || len<0){  throw new RangeError('toFixed() digits argument must be between 0 and 20');  }  // .123转为0.123  var number = Number(this);  if (isNaN(number) || number >= Math.pow(10, 21)) {  return number.toString();  }  if (typeof (len) == 'undefined' || len == 0) {  return (Math.round(number)).toString();  }  var result = number.toString(),  numberArr = result.split('.');   if(numberArr.length<2){  //整数的情况  return padNum(result);  }  var intNum = numberArr[0], //整数部分  deciNum = numberArr[1],//小数部分  lastNum = deciNum.substr(len, 1);//最后一个数字   if(deciNum.length == len){  //需要截取的长度等于当前长度  return result;  }  if(deciNum.length < len){  //需要截取的长度大于当前长度 1.3.toFixed(2)  return padNum(result)  }  //需要截取的长度小于当前长度,需要判断最后一位数字  result = intNum + '.' + deciNum.substr(0, len);  if(parseInt(lastNum, 10)>=5){  //最后一位数字大于5,要进位  var times = Math.pow(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值