Javascript局部变量有没有属性描述符,如果有怎么获取?
答案:3 悬赏:20 手机版
解决时间 2021-01-09 14:49
- 提问者网友:蓝琪梦莎
- 2021-01-09 11:58
Javascript局部变量有没有属性描述符,如果有怎么获取?
最佳答案
- 五星知识达人网友:十鸦
- 2021-01-09 13:06
代码如下:
function square(num){
var total = num*num;//局部变量
return total;
}
var total = 50;//全局变量
var number = square(20);
alert(total);//结果为50
function square(num){
total = num*num;//全局变量
return total;
}
var total = 50;//全局变量
var number = square(20);
alert(total);//结果为400
这细微的差别就会影响到程序的结果
代码如下:
body{
color:white;
background-color:black;
}
这些颜色不仅作用于那些直接包含在标签里的内容,还将作用于嵌套在body元素内的所有元素
id属性就像一个挂钩,它一头连着文档里的某个元素,另一头连着CSS样式表里的某个样式
document.getElementById("purchases")这个调用将返回一个对象,这个对象对应着document对象里的一个独一无二的元素,那个元素
的的id属性值为purchases
其实,文档中的每个元素都是一个对象。利用DOM提供的方法能够得到任何一个对象。
getElementsByTagName返回一个数组,即使整个文档里只有一个元素,也返回一个数组。
示例:
代码如下:
var items = document.getElementsByTagName("li");
for(var i = 0;i alert(typeof items[i]);
}
显示信息都是object
getElementByClassName
也返回一个具有相同类名的元素数组
获取和设置属性
getAttribute
object.getAttribute(attribute)
注:getAttribute方法不属于document对象,它只能通过元素节点对象调用。
setAttribute
object.setAttribute(attribute,value)
例子:
var shopping = document.getElementById("purchases");
shopping.setAttribute("title","a list of goods");
function square(num){
var total = num*num;//局部变量
return total;
}
var total = 50;//全局变量
var number = square(20);
alert(total);//结果为50
function square(num){
total = num*num;//全局变量
return total;
}
var total = 50;//全局变量
var number = square(20);
alert(total);//结果为400
这细微的差别就会影响到程序的结果
代码如下:
body{
color:white;
background-color:black;
}
这些颜色不仅作用于那些直接包含在标签里的内容,还将作用于嵌套在body元素内的所有元素
id属性就像一个挂钩,它一头连着文档里的某个元素,另一头连着CSS样式表里的某个样式
document.getElementById("purchases")这个调用将返回一个对象,这个对象对应着document对象里的一个独一无二的元素,那个元素
的的id属性值为purchases
其实,文档中的每个元素都是一个对象。利用DOM提供的方法能够得到任何一个对象。
getElementsByTagName返回一个数组,即使整个文档里只有一个元素,也返回一个数组。
示例:
代码如下:
var items = document.getElementsByTagName("li");
for(var i = 0;i
}
显示信息都是object
getElementByClassName
也返回一个具有相同类名的元素数组
获取和设置属性
getAttribute
object.getAttribute(attribute)
注:getAttribute方法不属于document对象,它只能通过元素节点对象调用。
setAttribute
object.setAttribute(attribute,value)
例子:
var shopping = document.getElementById("purchases");
shopping.setAttribute("title","a list of goods");
全部回答
- 1楼网友:慢性怪人
- 2021-01-09 13:54
js变量没有属性描述符吧 但是js对象是有value/configurable/writable/enumerable等数据属性描述符,也包含getter/setter等访问器属性
- 2楼网友:鱼芗
- 2021-01-09 13:24
先来感受一下属性描述符:
var myObject = {
a: 2
};
Object.getOwnPropertyDescriptor( myObject, "a" );
// { value: 2, writable: true, enumerable: true, configurable: true }
这里可以看到,除了 value 之外,JavaScript 属性描述符有 writable,enumerable, 和 configurable 这三个特性。如果不指定的话,这三个特性都是true。但我们也可以通过 Object.defineProperty(...) 函数来指定它们为我们想要的值。
var myObject = {};
Object.defineProperty( myObject, "a", {
value: 2,
writable: true,
configurable: true,
enumerable: true
} );
// 上面的定义等同于 myObject.a = 2;
// 所以如果不需要修改这三个特性,我们不会用 `Object.defineProperty`
myObject.a; // 2
下面让我们来看看属性描述符到底能为 JavaScript 带来哪些不一样的东西。
是否可写 (Writable)
首先,属性描述符可以用来控制对象的某个属性是否可写:
// "use strict";
var myObject = {};
Object.defineProperty( myObject, "a", {
value: 2,
writable: false, // 不可写!
configurable: true,
enumerable: true
} );
myObject.a = 3; // 写入的值将会被忽略
myObject.a; // 2
如果应用了 strict mode 的话,那么 myObject.a 将会抛出 TypeError,而不是仅仅忽略写入的值。ES5 还引入了对象属性的 Getter 和 Setter,这里的 writable: false可以认为是和没有定义或者定义了没有任何操作的 setters 的情况大致等同。当然了,如果是 strict mode 下,需要在 setters 里面抛出 TypeError 来完全模拟 writable: false 的情形。
是否可配置 (Configurable)
这个特性用来描述对象的某个属性是否可以用 Object.defineProperty(...) 来重新配置:
var myObject = {
a: 2
};
myObject.a = 3;
myObject.a; // 3
Object.defineProperty( myObject, "a", {
value: 4,
writable: true,
configurable: false, // 不可配置!
enumerable: true
} );
myObject.a; // 4
myObject.a = 5;
myObject.a; // 5
Object.defineProperty( myObject, "a", {
value: 6,
writable: true,
configurable: true,
enumerable: true
} ); // TypeError
注意,一旦某个属性被指定为 configurable: false,那么就不能从新指定为configurable: true 了,这个操作是单向,不可逆的。另外,这个特性还会影响delete 操作的行为,来看一段代码:
var myObject = {
a: 2
};
myObject.a; // 2
delete myObject.a;
myObject.a; // undefined
Object.defineProperty( myObject, "a", {
value: 2,
writable: true,
configurable: false,
enumerable: true
} );
myObject.a; // 2
delete myObject.a;
myObject.a; // 2
这里可以看到,一旦指定某个属性为 configurable: false,那么 delete 操作会被忽略。
var myObject = {
a: 2
};
Object.getOwnPropertyDescriptor( myObject, "a" );
// { value: 2, writable: true, enumerable: true, configurable: true }
这里可以看到,除了 value 之外,JavaScript 属性描述符有 writable,enumerable, 和 configurable 这三个特性。如果不指定的话,这三个特性都是true。但我们也可以通过 Object.defineProperty(...) 函数来指定它们为我们想要的值。
var myObject = {};
Object.defineProperty( myObject, "a", {
value: 2,
writable: true,
configurable: true,
enumerable: true
} );
// 上面的定义等同于 myObject.a = 2;
// 所以如果不需要修改这三个特性,我们不会用 `Object.defineProperty`
myObject.a; // 2
下面让我们来看看属性描述符到底能为 JavaScript 带来哪些不一样的东西。
是否可写 (Writable)
首先,属性描述符可以用来控制对象的某个属性是否可写:
// "use strict";
var myObject = {};
Object.defineProperty( myObject, "a", {
value: 2,
writable: false, // 不可写!
configurable: true,
enumerable: true
} );
myObject.a = 3; // 写入的值将会被忽略
myObject.a; // 2
如果应用了 strict mode 的话,那么 myObject.a 将会抛出 TypeError,而不是仅仅忽略写入的值。ES5 还引入了对象属性的 Getter 和 Setter,这里的 writable: false可以认为是和没有定义或者定义了没有任何操作的 setters 的情况大致等同。当然了,如果是 strict mode 下,需要在 setters 里面抛出 TypeError 来完全模拟 writable: false 的情形。
是否可配置 (Configurable)
这个特性用来描述对象的某个属性是否可以用 Object.defineProperty(...) 来重新配置:
var myObject = {
a: 2
};
myObject.a = 3;
myObject.a; // 3
Object.defineProperty( myObject, "a", {
value: 4,
writable: true,
configurable: false, // 不可配置!
enumerable: true
} );
myObject.a; // 4
myObject.a = 5;
myObject.a; // 5
Object.defineProperty( myObject, "a", {
value: 6,
writable: true,
configurable: true,
enumerable: true
} ); // TypeError
注意,一旦某个属性被指定为 configurable: false,那么就不能从新指定为configurable: true 了,这个操作是单向,不可逆的。另外,这个特性还会影响delete 操作的行为,来看一段代码:
var myObject = {
a: 2
};
myObject.a; // 2
delete myObject.a;
myObject.a; // undefined
Object.defineProperty( myObject, "a", {
value: 2,
writable: true,
configurable: false,
enumerable: true
} );
myObject.a; // 2
delete myObject.a;
myObject.a; // 2
这里可以看到,一旦指定某个属性为 configurable: false,那么 delete 操作会被忽略。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯