第四章 变量声明

变量声明

一、let 和 const

  • let 和 const 是 JavaScript 里相对较新的变量声明方式。 let 在很多方面与 var 是相似的,但是可以帮助大家避免在 JavaScript 里常见一些问题(如作用域提升)。 const 是对 let 的一个增强,它能阻止对一个变量再次赋值。
  • 因为 TypeScript 是 JavaScript 的超集,所以它本身就支持 let 和 const。 推荐使用它们来代替 var。
  • 使用最小特权原则,所有变量除了你计划去修改的都应该使用 const。

二、代码示例

//块级作用域变量的获取
function theCityThatAlwaysSleeps() {
    let getCity;

    if (true) {
        let city = "Seattle";
        getCity = function() {
            return city;
        };
    }

    return getCity();
}

//重定义及屏蔽,这个版本的循环能得到正确的结果,因为内层循环的i可以屏蔽掉外层循环的i
function sumMatrix(matrix: number[][]) {
    let sum = 0;
    for (let i = 0; i < matrix.length; i++) {
        var currentRow = matrix[i];
        for (let i = 0; i < currentRow.length; i++) {
            sum += currentRow[i];
        }
    }

    return sum;
}

//const 声明
const numLivesForCat = 9;
const kitty = {
    name: "Aurora",
    numLives: numLivesForCat
};
// Error
kitty = {
    name: "Danielle",
    numLives: numLivesForCat
};
// all "okay"
kitty.name = "Rory";
kitty.name = "Kitty";
kitty.name = "Cat";
kitty.numLives--;

三、解构

  • 解构数组
//最简单的解构
let input = [1, 2];
let [first, second] = input;
console.log(first); // outputs 1
console.log(second); // outputs 2

// 交换变量
[first, second] = [second, first];

//作用于函数参数
function f([first, second]: [number, number]) {
    console.log(first);
    console.log(second);
}
f(input);

//数组里使用...语法创建剩余变量
let [first, ...rest] = [1, 2, 3, 4];
console.log(first); // outputs 1
console.log(rest); // outputs [ 2, 3, 4 ]

//忽略你不关心的尾随元素
let [first] = [1, 2, 3, 4];
console.log(first); // outputs 1
let [, second, , fourth] = [1, 2, 3, 4];
  • 对象解构
//对象解构
let o = {
    a: "foo",
    b: 12,
    c: "bar"
};
let { a, b } = o;

//就像数组解构,你可以用没有声明的赋值
({ a, b } = { a: "baz", b: 101 });

//你可以在对象里使用...语法创建剩余变量
let { a, ...passthrough } = o;
let total = passthrough.b + passthrough.c.length;
  • 属性重命名
//你也可以给属性以不同的名字
let { a: newName1, b: newName2 } = o;
  • 默认值
//默认值可以让你在属性为 undefined 时使用缺省值
function keepWholeObject(wholeObject: { a: string; b?: number }) {
    let { a, b = 1001 } = wholeObject;
}
  • 函数声明
//解构也能用于函数声明
type C = { a: string; b?: number };
function f({ a, b }: C): void {
    // ...
}
  • 展开
//将一个数组展开为另一个数组
let first = [1, 2];
let second = [3, 4];
let bothPlus = [0, ...first, ...second, 5];

//将一个对象展开为另一个对象
let defaults = { food: "spicy", price: "$$", ambiance: "noisy" };
let search = { ...defaults, food: "rich" };
//注意:如果前后对象有相同的属性,则后面的覆盖前面的

原文地址:https://www.cnblogs.com/zfc2201/p/8157592.html

时间: 2024-10-08 21:47:45

第四章 变量声明的相关文章

第四章—变量,作用域和内存问题(二)

第四章-变量,作用域和内存问题(二) JS没有块级作用域 js没有块级作用域,这个概念容易导致误解,这里就区分下几个情况,大家好好参考下: 我们知道,在其他类C的语言中,由花挂号封闭的代码块都有自己的作用域.但是在JS中,却没有块级作用域: 这里if(true){}代表条件永真,永远执行这条.if(false){}的话就是永远不执行这条. 这个代码执行之后,在if语句定义的变量,在if语句外可以访问的到.在if语句中的变量声明会将变量添加到当前的执行环境中(这里是全局环境). 还有如下的两个例子

第四章—变量,作用域和内存问题(三)

执行环境和作用域 我们知道,所有 JavaScript 代码都是在一个执行环境中被执行的.执行环境是一个概念,一种机制,用来完成JavaScript运行时在作用域.生存期等方面的处理,它定义了变量或函数是否有权访问其他数据,决定各自行为. 在javascript中,可执行的JavaScript代码分三种类型:        1. Global Code,即全局的.不在任何函数里面的代码,例如:一个js文件.嵌入在HTML页面中的js代码等.        2. Eval Code,即使用eval

第四章 变量 作用域和内存问题

4.1变量 变量包含2种类型的值: 基本类型的值: 即undefined,null, string,number,boolean.   按值访问,可以操作保存在变量中实际的值, 不能添加属性. var name = "Nicholas"; name.age = 27; console.log(name.age); //undefined 引用类型的值:多个值构成的对象.JS不允许直接操作对象的内存空间.给一个对象添加属性是,是在实际的对象中添加. 俩种类型值的区别: 1.保存方式不同:

第四章 变量、作用域和内存问题(二 )

alert(typeof a);//undefined a = function () { var a = '2'; return a; }; alert(typeof a);//function alert(typeof a());//number 2.instanceof var obj = {obj:1}; alert(obj instanceof Object);//true var num = 1; alert(num instanceof Number);//false 所有引用类型

第四章 变量作用域和内存问题--笔记6

JavaScript没有块级作用域 使用var声明的变量会自动被添加到最近的环境中,如:在函数内部,最近的环境就是函数的局部环境,在with语句中,最近的环境就函数环境.如果初始化变量时没有使用var,则该变量自动被添加到全局环境. 在某个环境中读取或写入某个标识符时,就会在从作用域链的前端开始逐级向下查找,直至找到即停止搜索.

第四章 变量作用域和内存问题--笔记5(含问题)

作用域链得到延长的情况: try-catch语句的catch块:会创建一个新的变量对象,其中包含的是被抛出的错误对象声明. with语句:会将指定的对象添加到作用域链中. 问1:为什么url变成了buildUrl的变量,它不是在with中定义的吗? 答1:with语句关联了location对象,这意味着在with语句的代码块内部,每个变量首先被认为是一个局部变量,而如果在局部环境中找不到该变量的定义,就会查询location对象中是否有同名的属性,如果发现了同名属性,则以location对象属性

JavaScript高级程序设计学习笔记第四章--变量、作用域和内存问题

1.变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象. 2.变量复制 如果从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上,两个变量可以参与任何操作而不会相互影响. 当从一个变量向另一个变量复制引用类型的值时,同样也会将存储在变量对象中的值复制一份放到为新变量分配的空间中.不同的是,这个值的副本实际上是一个指针,而这个指针指向存储在堆中的一个对象.复制操作结束

《跟老男孩学Linux运维之shell编程实战》-第四章 变量的数值计算

本文讲解shell编程中变量的数值计算. 1.常见的算术运算符: 提示: 此处对于我自己来说++.--比较难理解,之前一看到脚本中有这些符号,就看不懂了,所以在此举例说明一下: [[email protected] ~]# a=10                  ==>定义变量a[[email protected] ~]# echo $((a++)) ==>如果a在运算符++或--的前面,那么输出整个表达式时,会输出a的值, 此前定义的变量a为10,所以此处的值为10.10[[email 

第四章 变量、作用域和内存问题

JavaScript变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据类型值的规则,变量的值及其数据类型可以在脚本的生命周期内改变. 4.1基本类型和引用类型的值 ECMAScript变量可能包含两种不同数据类型的值:基本类型指的是简单的数据段,而引用类型指那些可能由多个值构成的对象. 5种基本数据类型(Undefined.Null.Boolean.Number.String)是按值访问的,因为可以操作保存在变量中的实际的值.基本类型