javascript中的c语言合法常量定义是自己定义的么?怎么找不到学习的规矩呢

我们在以往中介绍使用JavaScript编写一个HelloJS的小程序,其中我们就用到变量。常量和变量是构成表达式的重要组成部分。常量在声明和初始化变量时,在标识符的前面加上关键字const,就可以把该指定为一个常量。顾名思义,常量是其值在使用过程中不会发生变化,实例代码如下:const NUM=100;NUM标识符就是常量,只能在初始化的时候被赋值,我们不能再次给NUM赋值。变量在JavaScript中声明变量,是在标识符的前面加上关键字var,实例代码如下:var scoreForStudent = 0.0;该语句声明scoreForStudent变量,并且初始化为0.0。如果在一个语句中声明和初始化了多个变量,那么所有的变量都具有相同的数据类型:var x = 10, y = 20;在多个变量的声明中,我们也能指定不同的数据类型:var x = 10, y =其中x为整型,y为布尔型。命名规范良好的编程习惯在使用常量和变量时候,它们的命名要规范,这样程序可读性好。1.常量名基本数据类型的常量名为全大写,如果是由多个单词构成,可以用下划线隔开,例如:var YEAR = 60;var WEEK_OF_MONTH = 3;2. 变量名变量的命名有几个风格,主要以清楚易懂为主有些程序员为了方便,使用一些单个字母来作为变量名称,如:j和i等,这会造成日后程序维护的困难,命名变量时发生同名的情况也会增加。单个字母变量一般只用于循环变量,因为它们的作用于只是在循环体内。在过去计算机语言对变量名称的长度会有所限制,但现在计算机语言已无这种限制,因此我们鼓励用清楚的名称来表明变量作用,通常会以小写字母作为开始,并在每个单字开始时第一个字母使用大写,例如:var maximumNumberOfLoginAttempts = 10;var currentLoginAttempt = 0;像这样的名称可以让人一眼就看出这个变量的作用。除了常量和变量命名要有命名要规范,其它的语言对象也是需要讲求命名要规范。其中对象等类型,它的命名规范通常是,大写字母作为开始,并在每个单字开始时第一个字母使用大写,例如:HelloWorldApp。函数名,往往由多个单词合成,第一个单词通常为动词,通常会以小写字母作为开始,并在每个单字开始时第一个字母使用大写,例如:balanceAccount和 isButtonPressed。2.1 注释JavaScript程序有两类注释:单行注释(//)和多行注释(/*...*/),这些注释方法C、C++和Java都是类似的。1.单行注释单行注释可以注释掉整行或者一行中的一部分。它一般不用于连续多行的注释文本,然而,它也可以用来注释掉连续多行的代码段。以下是几种风格注释的例子:if x & 1 {
//if x & 1 {
//} else {
// //注释2
//}2.块注释一般用于连续多行的注释文本,但它也可以的单行进行注释。以下是几种风格注释的例子:if x & 1 {
/* 注释1 */
/* 注释2 */
if x & 1 {
if x & 1 {
/* 注释1 */
/* 注释2 */
*/JavaScript多行注释有一个其它语言没有的优点,就是它们可以嵌套,上述实例的最后一种情况是实现了多行注释嵌套。在程序代码中使用注释,对容易引起误解的代码进行注释是必要的,但应避免对己清晰表达信息代码进行注释。需要注意的是:频繁的注释有时反映出代码的低质量。当你觉得被迫要加注释的时候,考虑一下重写代码使其更清晰。更多内容请关注最新Cocos图书《Cocos2d-x实战:JS卷——Cocos2d-JS开发》本书交流讨论网站:欢迎加入Cocos2d-x技术讨论群:更多精彩视频课程请关注智捷课堂Cocos课程:智捷课堂现推出Cocos会员,敬请关注:《Cocos2d-x实战 JS卷》现已上线,各大商店均已开售:京东:欢迎关注智捷iOS课堂微信公共平台,了解最新技术文章、图书、教程信息
js中如何定义常量
1. 定义一些常量,使用闭包,匿名函数实现常量的定义。
var Class = (function() {
var UPPER_BOUND = 100;//定义了常量
var Test={...
CocosCreator
js 全局变量声明 require方式
var GlobalData
testString:
CommonInclude.j...
JS中常量与变量以及命名规范
顾名思义,变量即可变的量,在JS中我们使用var 关键词来定义一个变量,而变量存储的值可以改变的 值是可以改变的。
在ES6中定义变量使用的是let。
JS中变量本身没有什么意义,仅仅是一...
Js_常量和变量
变量和常量
//1.常量:字符串型、布尔型、数值型、null……
document.write(&JavaSc...
js面向对象编程:如何定义常量?
js中有一个关键字const,但目前的浏览器似乎还不支持,如果一定要定义一些常量,其实可以使用闭包,匿名函数实现常量的定义。
var Class = (function() {
JS中变量和常量的定义
var只能声明一个变量,这个变量可以保存任何数据类型的值ES6之前并没有定义声明常量的方式,ES6标准引入的第三个声明类关键词与let类似:const,使用const定义常量后,常量无法改变1 con...
JS 的7种数据类型及常量
RT如下(注意Array、Object、null、undefined的大小写):
数 : 11.11
: true,fa...
JavaScript 常量定义
http://www.kuqin.com/shuoit/222.html
JavaScript中类似java常量constants使用方法
JavaScript中类似java常量constants使用方法 –在写js和后台交互传参的时候,经常要用到一些常量,类似java里面的static属性,如果在js中写死,要是以后常...
没有更多推荐了,&&& &nbsp&nbsp&nbsp会员注册
本站不参与评论!()
自觉遵守:爱国、守法、自律、真实、文明的原则
尊重网上道德,遵守中华人民共和国各项有关法律法规
严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的评论
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
您在本站发表的评论,本站有权保留、转载、引用或者删除
参与本评论即表明您已经阅读并接受上述条款详解JavaScript常量定义
&更新时间:日 08:38:40 & 作者:DongXv
本文主要对JavaScript常量定义进行详细介绍,具有一定的参考价值,下面跟着小编一起来看下吧
相信同学们在看见这个标题的时候就一脸懵逼了,什么?JS能常量定义?别逗我好吗?确切的说,JS当中确实没有常量(ES6中好像有了常量定义的关键字),但是深入一下我们可以发现JS很多不为人知的性质,好好利用这些性质,就会发现一个不一样的JS世界。
首先,在JS当中,对象的属性其实还含有自己的隐含性质,比如下面对象:
var obj = {};
obj.a = 1;
obj.b = 2;
在这里我们定义了一个对象 obj ,并且定义了这个对象的两个属性 a 、 b ,我们可以修改这两个属性的值,可以用 delete 关键字删除这两个属性,也可以用 for ... in ... 语句枚举 obj 对象的所有属性,以上的这些操作叫做对象属性的性质,在我们平常编写代码的时候我们会不知不觉的默认了这些性质,把他们认作为JS应有的性质,殊不知这些性质其实是可以修改的。我通常的定义的属性的方法,默认了属性的性质,不过我们也可以在定义属性的时候修改属性的性质,比如:
var obj = {};
obj.a = 1;
obj.b = 2;
var obj = {
var obj = {};
Object.defineProperty(obj, "a", {
writable: true,
configurable: true, //可配置
enumerable: true
Object.defineProperty(obj, "b", {
writable: true,
configurable: true, //可配置
enumerable: true
这里涉及到了一个方法,Object.defineProperty(),该方法是ES5规范中的,该方法的作用是在对象上定义一个新属性,或者修改对象的一个现有属性,并对该属性加以描述,返回这个对象,我们来看一下浏览器兼容性:
Firefox (Gecko)
Internet Explorer
还是天煞的IE8,如果你的项目要求兼容IE8,那么这个方法也就不适用了,不过IE8也对该方法进行了实现,只能在DOM对象上适用,而且有一些独特的地方,在这里就不讲解了。
Object.defineProperty() 方法可以定义对象属性的数据描述和存储描述,这里我们只讲数据描述符,不对存储描述符讲解,数据描述符有以下选项:
configurable
当且仅当该属性的 configurable 为 true 时,该属性描述符才能够被改变,也能够被删除。默认为 false。
enumerable
当且仅当该属性的 enumerable 为 true 时,该属性才能够出现在对象的枚举属性中。默认为 false。
该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认为 undefined。
当且仅当该属性的 writable 为 true 时,该属性才能被赋值运算符改变。默认为 false。
注意,当我们用常规方法定义属性的时候,其除 value 以外的数据描述符默认均为 true ,当我们用 Object.defineProperty() 定义属性的时候,默认为 false。
也就是说,当我们把 writable 设置为 false 的时候,该属性是只读的,也就满足了常量了性质,我们把常量封装在CONST命名空间里面:
var CONST = {};
Object.defineProperty(CONST, "A", {
writable: false, //设置属性只读
configurable: true,
enumerable: true
console.log(CONST.A); //1
CONST.A = 2; //在严格模式下会抛错,在非严格模式下静默失败,修改无效。
但是这样定义的常量不是绝对的,因为我们依然可以通过修改属性的数据描述符来修改属性值:
var CONST = {};
Object.defineProperty(CONST, "A", {
writable: false,
configurable: true,
enumerable: true
Object.defineProperty(CONST, "A", {
writable: true, //恢复属性的可写状态
configurable: true,
enumerable: true
console.log(CONST.A); //2
CONST.A = 3;
console.log(CONST.A); //3
想要做到真正的常量,还需要将属性设置为不可配置:
var CONST = {};
Object.defineProperty(CONST, "A", {
writable: false,
//设置属性只读
configurable: false,
//设置属性不可配置
enumerable: true
console.log(CONST.A); //1
CONST.A = 2; //错误!属性只读
Object.defineProperty(CONST, "A", {
writable: true,
configurable: true,
enumerable: true
}); //错误!属性不可配置
但是如果只设置属性为不可配置状态,依然可以对属性值进行修改:
var CONST = {};
Object.defineProperty(CONST, "A", {
writable: true,
//设置可写
configurable: false,
//设置属性不可配置
enumerable: true
console.log(CONST.A); //1
CONST.A = 2;
console.log(CONST.A); //2
进而我们可以推断出,configurable 描述符仅冻结属性的描述符,不会对属性值产生影响,也就是说该描述符会冻结 writable、configurable、enumerable 的状态,不会对属性值加以限制:
var CONST = {};
Object.defineProperty(CONST, "A", {
writable: false,
//设置不可写
configurable: false,
//设置属性不可配置
enumerable: false
//设置不可枚举
Object.defineProperty(CONST, "A", {
//该属性本身不受 configurable 的影响,但由于属性不可写,受 writable 的限制
writable: true,
//错误!属性不可配置
configurable: true,
//错误!属性不可配置
enumerable: true
//错误!属性不可配置
但是 configurable 的限制有一个特例,就是 writable 可以由 true 改为 false,不能由 false 改为 true:
var CONST = {};
Object.defineProperty(CONST, "A", {
writable: true,
//设置可写
configurable: false,
//设置属性不可配置
enumerable: false
//设置不可枚举
Object.defineProperty(CONST, "A", {
value: 2, //该属性本身不受 configurable 的影响,由于属性可写,修改成功
writable: false,
configurable: false,
enumerable: false
console.log(CONST.A); //2
CONST.A = 3; //错误!属性只读
可枚举描述符用于配置属性是否可以枚举,也就是是否会出现在 for ... in ... 语句中:
var CONST = {};
Object.defineProperty(CONST, "A", {
writable: false,
configurable: false,
enumerable: true //可枚举
Object.defineProperty(CONST, "B", {
writable: false,
configurable: false,
enumerable: false //不可枚举
for (var key in CONST) {
console.log(CONST[key]); //1
有了以上的基础,我们也就学会一种定义常量的方法,使用属性的数据描述符,下次我们需要用到常量的时候,就可以定义一个 CONST 命名空间,将常量封装在该命名空间里面,由于属性描述符默认为 false,所以我们也可以这样定义:
var CONST = {};
Object.defineProperty(CONST, "A", {
enumerable: true
Object.defineProperty(CONST, "B", {
enumerable: true
以上方法是从属性的角度的去定义一组常量,不过我们还可以用另外一种方法,从对象的角度去配置一个对象包括它的所有属性,Object.preventExtensions() 方法可以让一个对象不可扩展,该对象无法再添加新的属性,但是可以删除现有属性:
var CONST = {};
CONST.A = 1;
CONST.B = 2;
Object.preventExtensions(CONST);
delete CONST.B;
console.log(CONST); //CONST: { A: 1}
CONST.C = 3; //错误!对象不可扩展
在该方法的基础之上,我们可以使用 Object.seal() 来对一个对象密封,该方法会阻止对象扩展,并将该对象的所有属性设置为不可配置,但是可写:
var CONST = {};
CONST.A = 1;
CONST.B = 2;
Object.seal(CONST);
CONST.A = 3;
console.log(CONST.A); //3
Object.defineProperty(CONST, "B", {
writable: true,
configurable: true, //错误!属性不可配置
enumerable: false,
//错误!属性不可配置
CONST.C = 3; //错误!对象不可扩展
也就是说 Object.seal() 方法相当于帮助我们批量的将属性的可配置描述符设置为 false ,所以说在代码实现层面相当于:
Object.seal = function (obj) {
Object.preventExtensions(obj);
for (var key in obj) {
Object.defineProperty(obj, key, {
value: obj[key],
writable: true,
configurable: false,
enumerable: true
在以上两个方法基础上,我们可以 Object.freeze() 来对一个对象进行冻结,实现常量的需求,该方法会阻止对象扩展,并冻结对象,将其所有属性设置为只读和不可配置:
var CONST = {};
CONST.A = 1;
CONST.B = 2;
Object.freeze(CONST);
CONST.A = 3; //错误!属性只读
Object.defineProperty(CONST, "B", {
//错误!属性只读
writable: true,
//错误!属性不可配置
configurable: true, //错误!属性不可配置
enumerable: false,
//错误!属性不可配置
CONST.C = 3; //错误!对象不可扩展
从代码实现层面上相当于:
Object.freeze = function (obj) {
Object.preventExtensions(obj);
for (var key in obj) {
Object.defineProperty(obj, key, {
value: obj[key],
writable: false,
configurable: false,
enumerable: true
最后我们在来看一下这三个方法的兼容性:
Object.preventExtensions()
Firefox (Gecko)
Internet Explorer
Basic support
Object.seal()
Firefox (Gecko)
Internet Explorer
Basic support
Object.freeze()
Firefox (Gecko)
Internet Explorer
Basic support
到底还是万恶的IE,均不兼容IE8
现在,我们也就有了两种方法在JS中定义常量,第一种方法是从属性层面上来实现,在命名空间上可以继续添加多个常量,而第二种方法是从对象层面上来实现,对冻结对象所有属性以及对象本身:
//第一种方法:属性层面,对象可扩展
var CONST = {};
Object.defineProperty(CONST, "A", {
enumerable: true
//第二种方法:对象层面,对象不可扩展
var CONST = {};
CONST.A = 1;
Object.freeze(CONST);
关于JS常量的问题就讲到这里了,许多书籍在介绍JS基础的时候都会提到JS当中没有常量,导致许多JS开发者在一开始就默认了JS是没有常量的这一说法。从严格语法意义上来讲,JS确实是没有常量的,但是我们可以通过对知识的深入和创造力来构建我们自己的常量,知识是死的,人是活的,只要我们不停的探索,满怀着创造力,就会发现其中不一样的世界。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具个回答 天前 13:18:11文件指出:...constant cannot change through re-assignmentconst x = {};
x.foo = 'bar';
console.log(x); // {foo : 'bar'}const y = [];
y.push('foo');
console.log(y); // ['foo'];const x = {};
x = {foo: 'bar'}; // error - re-assigning
const y = ['foo'];
const y = ['bar']; // error - re-declaring
const foo = 'bar';
foo = 'bar2';
// error - can not re-assign
var foo = 'bar3';
// error - already declared
function foo() {};
// error - already declared 天前 13:31:45如果希望冻结数组或对象以使其无法修改,则可以使用Object.freeze方法,该方法已经是ECMAScript 5的一部分const x = Object.freeze(['a'])
x.push('b')
console.log(x) // [&a&]扫描二维码扫描关注云+社区}

我要回帖

更多关于 vba中定义符号常量可以用关键字 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信