变量、常量的声明和使用、数据类型的转换

本文详细介绍了JavaScript中的变量和常量概念,包括声明方式、作用域规则、数据类型及转换等内容,并对比了ES6中var与let的区别。

1、变量和常量

    变量:存储信息的容器,值可以改变。

    变量声明:使用关键字var来声明变量;使用"="为变量赋值;未初始化的变量自动取值为"undefind";未声明和初始化变量,直接使用会报错;未声明仅初始化的变量,会自动创建为全局 变量;建议所有变量使用前都先声明。

    变量命名规范:可包含数字、字母、下划线;不能以数字开头;常用于表示变量、函数、数组、对象的名称;名称最好语义化;不能使用保留字作为名称;推荐使用驼峰命名。

 

***ES6中,添加Let来声明变量。它的用法类似于var,但Let生命的变量只在当前代码块内有效。

 

    常量:声明后值不能改变的量。

    常量声明:使用const关键字声明一个常量,习惯上常量名使用全大写字母形式;一旦创建,值不可更改。

 

    **声明提前:程序在正式执行前,会将所有var生命的变量和function生命的函数提前到当前作用域的顶部,但是变量的赋值和函数体会留在原位置。

 

    **按值传递:两变量间赋值,或将变量作为函数参数传递时,都仅将变量的值或函数的参数值复制一份副本传递,不会改变原变量。

 

2、ES6新加Let声明方法同var声明的区别。

    (1)let不存在声明提前现象。所有变量只能在声明后使用,否则会报错。

    (2)暂时性死区:只要块级作用域内有let,那let声明的变量与该作用域外的变量无关,它只受let影响。该作用域内let声明的变量之前的声明和使用该变量都会报错。该代码块对let生命的变量形成了封闭区。

    (3)let不允许在同一代码块内一个变量名声明多次。

 

**ES6规定,const声明不允许一个变量名声明多次;它也会形成暂时性死区;一旦成名必须立即初始化。

 

**ES6规定,var命令和function命令声明的全局变量,依旧是全局对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于全局对象的属性。也就是说,从ES6开始,全局变量将逐步与全局对象的属性脱钩。

 

3、数据类型及其转换

         数据类型:

                   原始类型:number、string、boolean、null、undefind

                   引用类型:object、math、date、error、function、array、Number、String、Boolean、                                   Regexp、Global

         数据类型转换:

                   **js是弱类型语言:

                                     声明变量是不需要规定变量存储的数据类型;

                                     赋值时,才动态判断数据类型,同一变量可先后保存不用类型的值;

                                     js会在需要时自动转换数据类型。

                   隐式转换:不需要程序员干预,js自动完成的类型转换。

                                     (1)算数计算:一切数据都默认转为数字;"+"运算时,如果碰到字符串,则变成连字符,结果为字符串(字符串转换);若数值无法被转为数字 类型,则为"NAN"。

                   **NAN不大于,不小于,不等于任何数。NAN参与任何计算,结果都为    NAN。

                   !isNaN(x)判断x是否为数字,true为数字,false为非数字。

                                     (2)关系运算:所有类型都转为数字再比较;若参与比较的两个数据都是字符串,则依次比较每个字符串的字符unicode号。

                                     (3)逻辑运算:所有类型转为布尔类型。只有5个值转为false: "",NAN,undefind,null,0;其余转为true。

       强制转换:程序员主动调用专门的函数,执行数据类 型转换。

                                     ***typeof(x)获得x的数据类型名称。

                                     (1)转字符串:x.toString()或String(x);toString()不能转undefind和null;

                                                                 String()相当于隐式转换。

                                                        ****number.toString(n)转为n进制数

                                     (2)转数字类型:Number(x),专用于将非字符串类型转数字;parseInt()自动从第一个字符开始读取每个数字,只要碰到第一个非数字字符就停止,自动跳过开头的空字符(取整);parseFloat()用法同parseInt()相同,取浮点数。

                                     (3)boolean类型:Boolean()相当于隐式转换。

                   快速转换:x+""转为字符串;!!x转为boolean.

 

***undefind和null区别:

                   (1)undefind表示所有只声明为赋值的变量的默认值。在内存中占有空间。

                   (2)null表示变量赋值为null,用于释放内存,不在内存中占据空间。

                   undefind==null为true,但是undefind===null为false.

 

**ES6新增块级作用域:let生命的变量支队当前作用域有效。在块级作用域中可以声明函数,函数声明类似于var,即会提升到全局作用域或函数作用域的头部;同时,函数声明还会提升到所在的块级作用域的头部。

转载于:https://www.cnblogs.com/yyhuqd/p/5853357.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值