Javascript对象中的只读属性真的只读吗?

时间:2014-08-19 15:56:29

标签: javascript

我知道可以在Javascript中使用与此类似的代码创建一个只读对象(抱歉,"从另一个线程借用它")

var obj = {};
Object.defineProperty( obj, "<yourPropertyNameHere>", {
  value: "<yourPropertyValueHere>",
  writable: false,
  enumerable: true,
  configurable: true
});

但作为Java开发人员,我知道我可以使用反射来更改声明为私有的字段。我需要知道的是:是否可以防止恶意最终用户更改以上述方式声明的只读变量?

编辑:好的,我明白了。这是整个安全基础架构的一部分,而不是整个安全基础架构。从客户端到服务器端的所有输入都将在服务器端验证(我不是完全白痴)。但我想探索做SOMETHING的可能性,让客户端了解后端安全基础设施(分配的角色等)。

1 个答案:

答案 0 :(得分:2)

这个问题只有一个答案,绝不相信js。即使您认为可以声明它,也无法确保用户不会更改孔对象。 避免用户篡改变量的方法是使用闭包。只需定义一个函数,声明所有变量,然后运行该函数。有一个简写:

(function () {
    //Your code, DECLARE ALL YOUR VARIABLES WITH "var variableName"
    //i.e.
    var myNumber = 3, myString = 'Hello World', myEmptyVar;
})();

看看'use strict'(严格模式)并使用jshint进行更好的编码