首页 > 编程语言 >JavaScript进阶08笔记

JavaScript进阶08笔记

时间:2023-06-26 16:22:17浏览次数:148  
标签:const 进阶 08 JavaScript 函数 var 声明 变量

语法和数据类型

声明

JavaScript 有三种声明方式。

  • var

    声明一个变量,可选初始化一个值。

  • let

    声明一个块作用域的局部变量,可选初始化一个值。

  • const

    声明一个块作用域的只读常量。

 

声明变量

你可以用以下三种方式声明变量:

  • 使用关键词 var 。例如 var x = 42。这个语法可以用来声明局部变量和全局变量。

  • 直接赋值。例如x = 42。在函数外使用这种形式赋值,会产生一个全局变量。在严格模式下会产生错误。因此你不应该使用这种方式来声明变量。

  • 使用关键词 let 。例如 let y = 13。这个语法可以用来声明块作用域的局部变量。

 

变量求值

varlet 语句声明的变量,如果没有赋初始值,则其值为 undefined

如果访问一个未声明的变量会导致抛出一个引用错误ReferenceError)异常:

 

变量提升

JavaScript 变量的另一个不同寻常的地方是,你可以先使用变量稍后再声明变量而不会引发异常。这一概念称为变量提升;JavaScript 变量感觉上是被“提升”或移到了函数或语句的最前面。但是,提升后的变量将返回 undefined 值。因此在使用或引用某个变量之后进行声明和初始化操作,这个被提升的变量仍将返回 undefined 值。

/**
* 例子 1
*/
console.log(x === undefined); // true
var x = 3;


/**
* 例子 2
*/
// will return a value of undefined
var myvar = "my value";

(function() {
 console.log(myvar); // undefined
 var myvar = "local value";
})();

由于存在变量提升,一个函数中所有的var语句应尽可能地放在接近函数顶部的地方。这个习惯将大大提升代码的清晰度。

在 ECMAScript 6 中,letconst同样会被提升变量到代码块的顶部但是不会被赋予初始值。在变量声明之前引用这个变量,将抛出引用错误(ReferenceError)。这个变量将从代码块一开始的时候就处在一个“暂时性死区”,直到这个变量被声明为止。

console.log(x); // ReferenceError
let x = 3;

 

函数提升

对于函数来说,只有函数声明会被提升到顶部,而函数表达式不会被提升。

/* 函数声明 */

foo(); // "bar"

function foo() {
 console.log("bar");
}


/* 函数表达式 */

baz(); // 类型错误:baz 不是一个函数

var baz = function() {
 console.log("bar2");
};

 

常量

const PI = 3.14;
  • 常量不可以通过重新赋值改变其值,也不可以在代码运行时重新声明。它必须被初始化为某个值。

  • 常量的作用域规则与 let 块级作用域变量相同。

  • 若省略const关键字,则该标识符将被视为变量。

  • 在同一作用域中,不能使用与变量名或函数名相同的名字来命名常量。例如:

// 这会造成错误
function f() {};
const f = 5;

// 这也会造成错误
function f() {
 const g = 5;
 var g;

 //语句
}

然而,对象属性被赋值为常量是不受保护的,所以下面的语句执行时不会产生错误。

const MY_OBJECT = {"key": "value"};
MY_OBJECT.key = "otherValue";

同样的,数组的被定义为常量也是不受保护的,所以下面的语句执行时也不会产生错误。

const MY_ARRAY = ['HTML','CSS'];
MY_ARRAY.push('JAVASCRIPT');
console.log(MY_ARRAY); //logs ['HTML','CSS','JAVASCRIPT'];

 

数据结构和类型

数据类型

最新的 ECMAScript 标准定义了 8 种数据类型:

  • 七种基本数据类型:

    • 布尔值(Boolean),有 2 个值分别是:truefalse.

    • null,一个表明 null 值的特殊关键字。JavaScript 是大小写敏感的,因此 nullNullNULL或变体完全不同。

    • undefined,和 null 一样是一个特殊的关键字,undefined 表示变量未赋值时的属性。

    • 数字(Number),整数或浮点数,例如: 42 或者 3.14159

    • 任意精度的整数 (BigInt) ,可以安全地存储和操作大整数,甚至可以超过数字的安全整数限制。

    • 字符串(String),字符串是一串表示文本值的字符序列,例如:"Howdy" 。

    • 代表(Symbol)( 在 ECMAScript 6 中新添加的类型).。一种实例是唯一且不可改变的数据类型。

  • 以及对象(Object)。

对象(Objects)和函数(functions)是这门语言的另外两个基本元素。你可以把对象当作存放值的一个命名容器,然后将函数当作你的程序能够执行的步骤。

 

数字转换为字符串

在包含的数字和字符串的表达式中使用加法运算符(+),JavaScript 会把数字转换成字符串。

在涉及其他运算符(译注:如下面的减号'-')时,JavaScript 语言不会把数字变为字符串。例如(译注:第一例是数学运算,第二例是字符串运算):

"37" - 7 // 30
"37" + 7 // "377"

 

字符串转换为数字

有一些方法可以将内存中表示一个数字的字符串转换为对应的数字。

  • parseInt() (en-US)

  • parseFloat()

parseInt 方法只能返回整数,所以使用它会丢失小数部分。另外,调用 parseInt 时最好总是带上进制 (radix) 参数,这个参数用于指定使用哪一种进制。

将字符串转换为数字的另一种方法是使用一元加法运算符

"1.1" + "1.1" = "1.11.1"
(+"1.1") + (+"1.1") = 2.2
// 注意:加入括号为清楚起见,不是必需的。

 

RegExp字面值

一个正则表达式是字符被斜线(译注:正斜杠“/”)围成的表达式。下面是一个正则表达式文字的一个例子。

var re = /ab+c/;
 

标签:const,进阶,08,JavaScript,函数,var,声明,变量
From: https://www.cnblogs.com/zjy1020/p/17505995.html

相关文章

  • JavaScript进阶09笔记
    错误处理异常处理语句你可以用throw语句抛出一个异常并且用try...catch语句捕获处理它。throw语句try...catch语句异常类型JavaScript可以抛出任意对象。然而,不是所有对象能产生相同的结果。尽管抛出数值或者字母串作为错误信息十分常见,但是通常用下列其中一种异......
  • JavaScript学习 -- 高阶函数
    一、普通函数比较大小写声明函数判断大于或小于数组中的某个数letarr=[1,2,3,4,5,6,7,8,9]functionaiyou(a){for(leti=0;i<arr.length;i++){if(arr[i]>a){console.log(arr[i])}}console.log("****************************")}functionbucuo(a){for(......
  • 像大神一样玩转JavaScript
    前言众所周知,JavaScript是一种非常流行的编程语言,它已经成为了网页开发的必备技能。但是,在我们从事JavaScript编程的时候,我们却没有完全发掘和利用它的全部潜力。在本文中,我们将分享一些高级的JavaScript技巧,希望帮助掘友们更好地理解和掌握JavaScript编程。关于JS高级用法在学习Ja......
  • JavaScript、vue、uniapp如何获取本周开始时间和结束时间?
    //获得本周的开始时间: getStartDayOfWeek(time){ letnow=newDate(time);//当前日期 letnowDayOfWeek=now.getDay();//今天本周的第几天 letday=nowDayOfWeek||7; letnowDay=now.getDate();//当前日 letnowMonth=now.getMonth();//......
  • JavaScript program to check if a given year is leap year Javascript判断是否是闰
    Ayearisleapyeariffollowingconditionsaresatisfied:Yearismultipleof400.Yearismultipleof4andnotmultipleof100.Approach: Getthevalueofinputfieldbyusingdocument.getElementById(“year”).valueCheckthegivenyearisleapyear......
  • JavaScript1.8.5新特性系列Object.keys
    以前在js-object这个分类里面也写过keys相关的api 在JavaScript1.8.5中,加入了原生的Object.keys这个api  Object.keys(obj);/*简单举例*/Object.keys({"A":"a","B":"b"});//["A","B"]兼容性写法:  if(!Object.keys){Object.keys=......
  • Linux多线程08-线程同步
    一个多线程售票示例://三个窗口,共100张票#include<stdio.h>#include<pthread.h>#include<unistd.h>inttickets=100;//所有线程都共享这100张票void*sellticket(void*arg){//卖票while(tickets>0){usleep(6000);//间隔6000微秒p......
  • ActiveX 控件在过去是非常流行的技术,但近年来已经逐渐被其他技术所取代。由于其局限性
    ActiveX控件是一种可重用的软件组件,它们基于微软的COM(ComponentObjectModel)技术,并被广泛应用于Windows平台上的应用程序开发。ActiveX控件可以包含图形用户界面元素、功能模块、数据处理等,并提供给其他应用程序使用。下面是关于ActiveX控件的一些常见信息:安装和注册:使用A......
  • 强化学习从基础到进阶-常见问题和面试必知必答[5]::梯度策略、添加基线(baseline)、优势函
    强化学习从基础到进阶-常见问题和面试必知必答[5]::梯度策略、添加基线(baseline)、优势函数、动作分配合适的分数(credit)1.核心词汇策略(policy):在每一个演员中会有对应的策略,这个策略决定了演员的后续动作。具体来说,策略就是对于外界的输入,输出演员现在应该要执行的动作。一般地,我......
  • 强化学习从基础到进阶-常见问题和面试必知必答[5]::梯度策略、添加基线(baseline)、优势函
    强化学习从基础到进阶-常见问题和面试必知必答[5]::梯度策略、添加基线(baseline)、优势函数、动作分配合适的分数(credit)1.核心词汇策略(policy):在每一个演员中会有对应的策略,这个策略决定了演员的后续动作。具体来说,策略就是对于外界的输入,输出演员现在应该要执行的动作。一般地,我们......