zoukankan      html  css  js  c++  java
  • [JavaScript语法学习]重新认识JavaScript

    JavaScript是实现ECMAScript标准的语言,目前最新的第六版标准于2015年6月发布,简称ES6。目前大多数浏览器都只是实现了ECMAScript标准的第五版。JavaScript的运行需要一个宿主环境,浏览器是最常见的宿主环境,另外还有服务器端环境Node等等。

    类型

    任何一门编程语言都少不了数据类型,那么在JavaScript中的类型有:

    1. Number

    2. String

    3. Boolean

    4. Object (Function, Array, Date, RegExp)

    5. Null

    6. Undefined

    7. Error

    8. Symbol

    9. Class

    虽然说类型有很多,但是只要记住,在JS中只有两种类型:值类型,引用类型。

    值类型:number, string, boolean

    基本的引用类型:Array, Object, Function

    其他的类型都是在ES6中被引入的,包括Class,  Symbol 等等。

    另外比较特殊的类型就是 null,  undefined

    于是乎这里引入了第二个问题:typeof 能够得到哪些类型值?

    首先,typeof的返回值是字符串

    其次,能够得到 string boolean number (三大基本类型) 和  object, function, null, undefined

    第三个问题,既然typeof不能用来区分引用类型,那么我该如何来区分引用类型呢?

    这时候就需要用到 instanceof 运算符,用来检测一个对象在其原型链上是否具有一个构造函数的prototype属性

    更多信息请访问 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/instanceof

    Number

    数字直接量:分为十进制,八进制和十六进制。但是在ES6的严格模式下,禁止使用八进制直接量。

    Number对象是经过封装的能够让你处理数字值的对象,Number对象是由Number()构造器创建的。

    new Number(value);

    JavaScript采用IEEE754标准定义的双精度64位格式(double-precision 64-bit format IEEE754 values),不区分整数值和浮点数值,所有数字都是浮点数值表示,因此小数相加会有精度不准的问题。

     

    内置对象Math处理高级数学函数和常数,内置函数parseInt()将字符串转换为整数,parseFloat()按照十进制格式解析浮点数字符串,运算符+把数字字符串转换为数值,特殊的Number值NaN进行数学运算都是NaN,内置函数isNaN()可以判断一个变量是否为NaN,Infinity, -Infinity分别表示正无穷和负无穷,内置函数isFinity()可以判断一个变量是否为正无穷,负无穷或者NaN

    需要详细了解Number可访问 [JavaScript语法学习]全面介绍Number

    String

    JavaScript中的字符串是一串Unicode字符序列

    需要详细了解String可访问 [JavaScript语法学习]全面介绍String

    其他类型

    null表示空值,必须使用null关键字才能访问。

    undefined是未定义类型的对象,表示一个未初始化的值。变量声明但是没有赋值则表示为undefined类型

    可以理解为undefined是从null派生出来的一个数据类型,所以undefined == null 为真,但是 undefined === null 为假

    布尔值true,false。其他类型的变量转换为布尔值类型的规则: false, 0, "", NaN, null, undefined都转换为false 其他则为true

    也可以使用Boolean()函数进行显示转换

    最后,提到类型,肯定忘不了类型转换和类型比较。

    数据转换涉及到各种类型之间相互转换的规则,而类型比较则是在前者的基础上弄明白==和===这两个比较运算符的区别。

    在if语句,+运算符,==,===,!! 以及 逻辑运算 这几种情形下,都会涉及到类型转换。具体的类型转换表如下

    [此处的贴图还没有制作好,对不住了]

    变量作用域

    在ES5中,语句块是没有作用域的,在JS中只有函数才有作用域。 但是从ES6开始,可以使用let, const关键字创建块作用域的变量

    函数

    函数是JS中的一等公民,如果一个函数没有return语句或者是一个没有值的return语句,则表示返回undefined

    如果调用函数时没有提供足够的参数,那么缺少的参数会被undefined替代

    函数体中有一个名为arguments的内部对象,是一个类似于数组的对象,但并是array数组,包括了所有传入的参数。

    function add(){
        var sum = 0;
        for(var i = 0; i < arguments.length; i++){
            sum += arguments[i];
        }
        return sum;
    }
    add(2,3,4,5);
    function svg(){
        var sum = 0;
        for(var i = 0; i < arguments.length; i++){
            sum+=arguments[i];
        }
        return sum/arguments.length;
    }
    svg(2,3,4,5);

    return语句有个小坑: 前面两个函数执行都没有问题,最后一个返回undefined

    function foo(){
        return { name: "foo"};
    }
    
    function foo(){
        return { 
            name: "foo"
        };
    }
    
    function foo(){
        return 
            { name: "foo"};
    }

    需要详细了解函数类型,可访问 [JavaScript语法学习]全面介绍函数

    其他知识点

    delete运算符 用于删除一个对象的属性

    delete expression

    delete object.property

    delete object['property']

    如果属性是一个不可配置的属性,那么在严格模式下删除会抛出异常,而在非严格模式下返回false.  其他情况下都返回true

    只能删除自身属性,而不能删除继承属性

    for...in循环只遍历可枚举属性,包含自身和继承的属性

    propertyIsEnumerable()返回布尔值,表明指定的属性是否是当前对象可枚举的自身属性

    hasOwnProperty() 判断某个对象是否含有指定的自身属性

    keys() 返回由给定对象的所有可枚举自身属性的属性名组成的数组

    Object.getOwnPropertyNames() 返回由指定对象的所有自身属性的属性名 (包括不可枚举属性) 组成的数组

  • 相关阅读:
    《临江仙·滚滚长江东逝水》
    .net Core Newtonsoft.Json 解析巨坑之注释影响代码
    C# 后端post请求帮助类
    鼠标点击事件
    常用Windows 消息列表
    WinUser.h>>>OnMessage事件
    Jellyfin流媒体服务器搭建和一些小坑
    ios开发遇到的问题
    节省你的时间,用AHK实现随机打开文件
    一些简单的AHK脚本提升电脑使用体验
  • 原文地址:https://www.cnblogs.com/joyjoe/p/6160686.html
Copyright © 2011-2022 走看看