• 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来决定是否需要进位,具体代码如下:

    1. // toFixed兼容方法
    2. 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(
  • 相关阅读:
    CenterNet复现
    理解C++四种强制类型转换static_cast、const_cast、reinterpret_cast和dynamic_cast
    就业季学好3d建模,找对才是赚到
    前端学习基础知识
    第一课:ASP.NET Core入门之简单快速搭建ASP.NET Core项目结构
    Redis学习笔记-跳跃表
    制作一个模板二
    盲盒电商模式:神秘感+趣味性,轻松实现社交购物
    vagrant设置磁盘大小
    联想笔记本电脑开机后一直黑屏的解决办法
  • 原文地址:https://blog.csdn.net/yd901020/article/details/127733578