美文网首页
基本语法

基本语法

作者: 一江碎月 | 来源:发表于2018-06-20 19:10 被阅读0次

    语句与表达式

    表达式会产生一个值,而语句不会。

    js 中有两种像语句的表达式

    对象字面量

    {
        foo:test()
    }
    

    该语句即可认为是一个创建对象的表达式。

    也可以认为是一个代码块(语句):

    • 一个代码块:一个由大括号包围的语句序列.
    • 一个标签:你可以在任何语句前面放置一个标签.这里的foo就是一个标签.
    • 一条语句:表达式语句 test().

    函数声明与函数表达式

    函数声明是声明一个函数,可以在任何地方使用该函数,因为解释器会将该函数声明提到了前面。

    函数表达式指的是定义一个函数,并将函数赋值给别的变量。

    function test(){
        return "aaaa"
    }
    

    该语句即可认为是一个函数声明,也可认为是一个函数表达式 —— 定义一个函数,并将其赋值给 test 。

    js 中,凡是 function 开头的语句,都是函数声明,其余的是函数表达式。

    总结

    因此,在实际使用中 表达式不能以花括号,function开头

    console.log(eval("{foo:123}"));
    console.log(eval("({foo:123})"));
    

    前者输出 123,因为 {foo:123} 被认为是一个语句,foo 是一个标签。后者输出 {foo: 123},因为加一层小括号后解析器会认为其为一个表达式:定义一个对象。


    严格模式

    严格模式激活更多的警告以及使 js 更干净

    js 文件第一行或<script> 标签第一行或方法第一行输入'use strict';


    数据类型

    分类
    基本数据类型 boolean,数字,字符串,null ,undefined
    对象 其余全部
    1. 基本数据类型按值比较,其属性不能被改变、添加或删除。
    > var str = 'ab'
    > str.length
    2
    > str.length = 3 // 不可改变
    > str.length
    2
    > str.foo = 3 // 无法定义
    > str.foo
    undefined
    
    1. null,undefined, false,0,NaN 和空字符串都被看作 false。

    2. 所有的数字都是浮点型。数字中含有 NaN(不是一个数字,如将 xxx 解析成数字时,返回的结果就是 NaN),Infinity 表示最大值,-Infinity 表示最小值。


    null 与 undefined

    undefined 表示未被初始化。访问不存在的属性也是 undefined。

    null 表示没有对象。但其有值,其值为 null。


    typeof 与 instanceof

    1. typeof 返回一个表示当前值的类型的 字符串。要注意:typeof null 返回的是 object函数返回 function

    2. instanceof 与 java 一样。但 undefined instanceof Object为 false,null instanceof Object 也为 false


    字符串

    1. 可以通过下标获取单个字符,下标越界时返回 undefined'fdas'[3] 的结果是 s。

    函数

    函数参数太多,会被忽略;参数太少,未赋值的形参会是 undefined 。


    作用域

    1. 变量的作用域总是 完整的函数

    2. 所有变量的声明都会被提升:声明会被移动函数的开始处,而赋值仍然会在原地。

    function f() {
        console.log(temp); // 输出 undefined,说明 temp 已被定义,但未被赋值
        console.log(aa); // 此句会报错: aa is not defined
        var temp = 3
    }
    

    arguments

    用于保存函数中所有实参。

    js 中函数没有重载,任何函数可以传任意数目的参数,所有参数都会保存在 arguments 中。

    arguments 看起来像数组,可以使用 length 读取长度,使用下标获取参数值。但不具备别的数组功能

    argments.callee 表示当前函数,可以用于实现递归。

    function f() {
        console.log(arguments.length) // 4
        console.log(arguments[3]) // 4
    }
    
    f(1,2,3,4)
    

    对象与构造函数

    1. 通过 {} 并写上键值对的方式创建一个对象

    2. 通过 in 检测属性是否存在

    3. 通过 delete 删除对象中的属性

    function f() {
        var o = {
            name:'---',
            say: function () {
                console.log("name is "+this.name)
            }
        };
        o.say();
        console.log('name' in o); // true
        delete o.name;
        console.log('name' in o); // false
    }
    
    f(1,2,3,4);
    
    1. 类名点的方法可以调用明确的属性,如果属性名是变量值或通过表达式计算得到,需要使用 类名[变量名] 形式:
    function f() {
        var o = {
            name:'---',
        };
        var p = 'name';
        console.log(o[p]) // 不能使用 o.p 形式
    }
    
    1. 通过 new 运算符调用函数时,函数就变成了构造函数。
    function Person(x,y){
        this.x = x;
        this.y = y;
    }
    
    var  p = new Person(1,2); // Person 为构造函数
    

    数组

    1. 通过改变 length 属性,可以删除 length 外的元素

    2. 通过 in 操作符判断指定的下标是否越界

    function test(){
        var a = [1,2,3,4,5];
        console.log(a);
    
        a.length = 3;
        console.log(a); // [1, 2, 3]
    
        console.log(4 in a); // false,下标 4 已越界
    }
    

    相关文章

      网友评论

          本文标题:基本语法

          本文链接:https://www.haomeiwen.com/subject/wpnxyftx.html