我有这个功能:
$scope.doPaste = function(destination) {
if ($scope.selectCopy.ids != []) {
console.log("will copy");
$scope.CopyFiles(destination);
}
if ($scope.selectMove.ids != []) {
console.log("will move");
$scope.MoveFiles(destination);
}
};
在我的应用中,$scope.selectMove.ids
和$scope.selectCopy.ids
不能同时为非空。我的意思是,例如当$scope.selectMove.ids
非空时$scope.selectCopy.ids
为空。
我的问题是,在控制台中,我总是看到两者都会复制并移动。
答案 0 :(得分:10)
注意[] != []
返回true
(因为它们是不同的对象)。
您应该使用length
来检查数组是否为空。
if($scope.selectCopy.ids.length > 0){
console.log("will copy");
$scope.CopyFiles(destination);
}
答案 1 :(得分:6)
我认为你应该通过angular.isObject()
进行检查,如果它是一个对象,它将返回true。
$scope.doPaste = function(destination) {
if (angular.isObject($scope.selectCopy.ids) && $scope.selectCopy.ids.length > 0) {
console.log("will copy");
$scope.CopyFiles(destination);
}
if (angular.isObject($scope.selectMove.ids) && $scope.selectMove.ids.length > 0){
console.log("will move");
$scope.MoveFiles(destination);
}
};
答案 2 :(得分:3)
您必须检查空值或未定义值。
$scope.doPaste=function(destination) {
if ($scope.selectCopy.ids && $scope.selectCopy.ids.length > 0) {
console.log("will copy");
$scope.CopyFiles(destination);
}
if ($scope.selectMove.ids && $scope.selectMove.ids.length > 0) {
console.log("will move");
$scope.MoveFiles(destination);
}
};
答案 3 :(得分:2)
您可能需要使用if else
条件:
if (empty){
console.log('empty');
}else{
console.log('not empty');
}
你的代码中的。它是这样的:
$scope.doPaste=function(destination) {
if ($scope.selectCopy.ids && $scope.selectCopy.ids.length > 0) {
console.log("will copy");
$scope.CopyFiles(destination);
}
else {
console.log("will move");
$scope.MoveFiles(destination);
}
};
答案 4 :(得分:0)
如果你想确保它是一个内部至少有一个元素的数组,那就做一个小函数来检查它。 (也许你以后想要延长那个检查)
var isNonEmptyArray = function(ar){
return Array.isArray(ar) && (ar.length > 0);
};
$scope.doPaste=function(destination){
if( isNonEmptyArray($scope.selectCopy.ids) ){
console.log("will copy");
$scope.CopyFiles(destination);
}
if( isNonEmptyArray($scope.selectMove.ids) ){
console.log("will move");
$scope.MoveFiles(destination);
}
};
还要避开弱!=
运算符,请使用严格的!==
。
与[]
相比没有帮助,[]
将始终返回一个新数组。