每次有人提到测试时undefined,都会指出它undefined不是一个关键字,因此可以设置为"hello",所以你应该使用 typeof x == "undefined".这对我来说似乎很荒谬.没有人会这样做,如果他们这样做,那将是足够的理由永远不会使用他们写的任何代码......对吗?
我发现一例人谁无意中设定的undefined到null,这给出一个理由,以避免假设undefined不会被覆盖.但是,如果他们这样做了,那么这个bug就不会被发现,我也看不出它有多好.
在C++中,每个人都清楚地知道这是合法的#define true false,但没有人建议你避免true使用它0 == 0.你只是假设没有人会成为一个足够强大的混蛋,如果他们这样做,再也不会相信他们的代码了.
这有没有真正咬过别人分配给undefined(有意)的人而且它破坏了你的代码,或者这更像是一个假想的威胁?我愿意冒昧地让我的代码更具可读性.这是一个非常糟糕的主意吗?
重申一下,我并不是要求如何防止重新分配未定义.我已经看过那些已经写过100次的技巧了.我问不使用这些技巧是多么危险.
当我编写手表处理函数时,我检查newVal参数undefined和null.为什么AngularJS有这样的行为,但没有特定的实用方法?所以有,angular.isUndefined但没有angular.isUndefinedOrNull.手动实现并不难,但是如何扩展角度以在每个控制器中具有该功能?TNX.
编辑:
这个例子:
$scope.$watch("model", function(newVal) {
if (angular.isUndefined(newVal) || newVal == null) return;
// do somethings with newVal
}
Run Code Online (Sandbox Code Playgroud)
处理这种方式是否是普遍接受的做法?
编辑2:
JSFiddle示例(http://jsfiddle.net/ubA9r/):
<div ng-app="App">
<div ng-controller="MainCtrl">
<select ng-model="model" ng-options="m for m in models">
<option value="" class="ng-binding">Choose model</option>
</select>
{{model}}
</div>
</div>
var app = angular.module("App", []);
var MainCtrl = function($scope) {
$scope.models = ['Apple', 'Banana'];
$scope.$watch("model", function(newVal) {
console.log(newVal);
});
};
Run Code Online (Sandbox Code Playgroud) 在我安装设计并创建用户模型之后.我rake db:migrate,然后我rake routes.然后我得到一个错误,"未定义的方法`devise_for'为#".可能导致此错误的原因是什么?
我有一个我写的功能,基本上看起来像这样:
function getNextCard(searchTerms) {
// Setup Some Variables
// Do a bunch of logic to pick the next card based on termed passed through what I'll call here as 'searchTerms' all of this logic is omitted because it's not important for my question.
// ...
// If we find a next card to give, than give it
if (nextCardFound)
return nextCardFound;
// Otherwise - I'm returning undefined
return undefined;
}
Run Code Online (Sandbox Code Playgroud)
问题:在这里返回"null"会更好吗?
我可以通过我想要的任何东西 - 显然......我只是不确定什么是最好用的东西.
调用此函数的代码知道如何处理未定义的(除非出现可怕的错误,否则实际上不会真正发生)
我问这个问题的原因是我听到某些地方听起来像"不要将未定义的变量分配给变量"或其他东西 - 它会使调试变得更难.所以,我可以看到null传回来的事实告诉我返回工作 …
我收到这个PHP错误:
PHP Notice: Undefined offset: 1
Run Code Online (Sandbox Code Playgroud)
这是抛出它的PHP代码:
$file_handle = fopen($path."/Summary/data.txt","r"); //open text file
$data = array(); // create new array map
while (!feof($file_handle) ) {
$line_of_text = fgets($file_handle); // read in each line
$parts = array_map('trim', explode(':', $line_of_text, 2));
// separates line_of_text by ':' trim strings for extra space
$data[$parts[0]] = $parts[1];
// map the resulting parts into array
//$results('NAME_BEFORE_:') = VALUE_AFTER_:
}
Run Code Online (Sandbox Code Playgroud)
这个错误是什么意思?是什么导致这个错误?
有没有一种干净的方法从对象中删除未定义的字段?
即
> var obj = { a: 1, b: undefined, c: 3 }
> removeUndefined(obj)
{ a: 1, c: 3 }
Run Code Online (Sandbox Code Playgroud)
我遇到了两个解决方案:
_.each(query, function removeUndefined(value, key) {
if (_.isUndefined(value)) {
delete query[key];
}
});
Run Code Online (Sandbox Code Playgroud)
要么:
_.omit(obj, _.filter(_.keys(obj), function(key) { return _.isUndefined(obj[key]) }))
Run Code Online (Sandbox Code Playgroud) 在我的HTML5页面中,我有一个div mousemove事件如下:
$('#canvas').mousemove(function(e){
xpos = e.offsetX;
ypos = e.offsetY;
$('#mouse').html("X : " + xpos + " ; Y : " + ypos);
});
Run Code Online (Sandbox Code Playgroud)
它适用于谷歌浏览器.但在Firefox中,两者都给出了价值undefined.我已经使用Firebug进行了检查,即将e对象记录到控制台.这两个offsetX和offsetY被发现undefined.
当我在谷歌搜索,有一个解决方案,说我应该使用layerX和layerY,如果这两个offsetX和offsetY是不确定的.但是从Firebug,我无法找到它.甚至我试过这样的尝试:
xpos = (e.offsetX==undefined)?e.layerX:e.offsetX;
ypos = (e.offsetY==undefined)?e.layerY:e.offsetY;
Run Code Online (Sandbox Code Playgroud)
但这也是undefined值得的.
我正在使用最新的jQuery - v1.8.2.我正在使用我的Firefox v14.0.1进行测试
任何想法或建议?
编辑
感谢dystroy和vusan帮助我.上述问题的解决方案如下:
解
$('#canvas').mousemove(function(e){
$('#cursor').show();
if(e.offsetX==undefined) // this works for Firefox
{
xpos = e.pageX-$('#canvas').offset().left;
ypos = e.pageY-$('#canvas').offset().top;
}
else // works …Run Code Online (Sandbox Code Playgroud) 这一行在下面做了什么?
undefined = 'A value';
Run Code Online (Sandbox Code Playgroud)
如果它没有改变undefined那么幕后会发生什么的价值呢?
您可能知道,在JavaScript '' + null = "null"和'' + undefined = "undefined"(在大多数浏览器中我可以测试:Firefox,Chrome和IE).我想知道这种奇怪的起源(Brendan Eich头脑中究竟是什么?!)以及是否有任何改变ECMA未来版本的目标.确实非常令人沮丧的是,必须要将'sthg' + (var || '')Strings与变量连接起来并使用像Underscore或其他的第三方框架那样使用锤子进行果冻钉敲击.
编辑:
为了满足StackOverflow所要求的标准并澄清我的问题,它有三个:
null或其undefined字符串值的奇怪背后的历史是什么String?String与潜在null或undefined对象不落入这个问题(得到一些"undefined"的"null"在字符串的中间)?根据主观标准最漂亮,我的意思是:简短,干净,有效.没必要说那'' + (obj ? obj : '')不是很漂亮......我想知道是否有人可以帮我解决这个问题 - 我只是C++的新手,这给我带来了相当多的麻烦.
我正在尝试制作相对简单的Deck和Card类对象.
错误显示在"Deck.cpp",声明一组卡片,然后当我尝试用卡片对象填充数组时.它说有一个未定义的引用Card::Card(),Card::Card(Card::Rank, Card::Suit)和Card::~Card().
我的所有包括看似正确,所以我不知道出了什么问题.
代码如下:
加入deck.h
#ifndef DECK_H
#define DECK_H
#include "card.h"
class Deck
{
public:
Deck();
~Deck();
Card DealNextCard();
void Shuffle();
void DisplayDeck();
protected:
private:
};
#endif // DECK_H
Run Code Online (Sandbox Code Playgroud)
deck.cpp
#include "Deck.h"
#include "card.h"
using namespace std;
const int NUM_TOTAL_CARDS = 52;
const int NUM_SUITS = 4;
const int NUM_RANKS = 13;
Card* cardArray;
void Deck() {
cardArray = new Card[NUM_TOTAL_CARDS];
int cardCount = 0;
for (int i = 0; …Run Code Online (Sandbox Code Playgroud)