San*_*yak 1 javascript angularjs angularjs-scope
我试着寻找类似于我的类似问题,但无法得到任何问题.请原谅,如果这个问题是重复的并且已经得到解答.
我的HTML有两个输入字段用于名字和姓氏,还有一个按钮:
<body ng-app="myApp" >
<div ng-controller="myCtrl">
<input type="text" ng-model="fname"/>
<input type="text" ng-model="lname"/>
<input type="button" ng-click="createObj();" value="Clear Scope"/>
<p>Fname = {{fname}}</p>
<p>Lname = {{lname}}</p>
</div>
Run Code Online (Sandbox Code Playgroud)
这是我的JS文件,它具有控制器功能:
var myApp = angular.module("myApp", []);
myApp.controller("myCtrl",function($scope){
$scope.fname = "sandeep";
$scope.lname = "nayak";
$scope.createObj= function(){
var obj = {fn:$scope.fname, ln: $scope.lname};
console.log(obj);
$scope.fname = "";
$scope.lname = "";
console.log(obj);
};
});
Run Code Online (Sandbox Code Playgroud)
在createObj方法中,我创建一个包含名字和姓氏的对象,然后清除$ scope.
在清除$ scope之前和之后,我将对象记录两次.但我没有看到任何区别.
为什么对象仍然相同,即使在我清除$ scope之后,因为我在我的对象中引用$ scope?
这与Angular无关,只与Javascript本身有关.
当你写作
var obj = {fn:$scope.fname, ln: $scope.lname};
Run Code Online (Sandbox Code Playgroud)
$ scope.fname/lname被解析为它们的值,它们是字符串,所以这个对象恰好被初始化为
var obj = {fn:"sandeep", ln:"nayak"};
Run Code Online (Sandbox Code Playgroud)
因此清除范围不会对它产生任何影响:这是因为字符串不像常规对象那样处理,而是像本机类型一样(与数字和布尔值相同).
这种行为的一个更简单的例子是:
var a = "hello";
var b = a;
a = "world";
console.log(a); // outputs "world"
console.log(b); // outputs "hello"
console.log(a === b); // outputs false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5772 次 |
| 最近记录: |