2016-05-24 5 views
1

このコードでエラーを指摘できますか?動的タイピングを解明しようとしているときにエラーが発生しました

var top = "800px"; 
var pos = top.indexOf('px'); 
top = top.substring(0,pos); 
console.log(top); 
top+=5; 
console.log(top); 
top+="px"; 
console.log(top); 

それは私がそれを操作中に、トップの種類を変更するかどうかをチェックしようとしている、私が使用しているものに関係なくコンパイルされません。

+0

そして、それが与える誤差がありますか...? –

+0

コンパイラによっては、次のエラーログが表示されます。 "エラー:原点" http://null.jsbin.com "でフレームがブロックされ、クロスオリジンフレームにアクセスできません。 atエラー(ネイティブ) at lupavimebe.js:2:14 https://static.jsbin.com/js/prod/runner-3.35.12.min.js:1:13891 https://static.jsbin.com/js/ prod/runner-3.35.12.min.js:1:10820 " (JS Bin上)、 またはindexOfまたは部分文字列は関数ではありません。私はライブラリを再リンクし、自分自身の機能を書いたが、それでも動作しません。 – Kweldulf

+0

'top = top.substring(0、pos);'行を 'top = top.substring(0、pos)* 1;に修正すると、上の値は8005pxになります。私はそれがあなたが望むものだとは思わない。 – Redu

答えて

1

topは、そのポイントを一番上のウィンドウに上書きすることはできません。reserved variable nameです。

だけtopPosのように、何か他のものに変数名を変更し、あなたが行ってもいいです:

var topPos = "800px"; 
var pos = topPos.indexOf('px'); 
topPos = topPos.substring(0,pos); 
console.log(topPos); 
topPos+=5; 
console.log(topPos); 
topPos+="px"; 
console.log(topPos); 

しかし、topはだけなので、関数内のコードをラップ、グローバルスコープに予約されていますまた、問題を解決します

function run() { 
    var top = "800px"; 
    var pos = top.indexOf('px'); 
    top = top.substring(0,pos); 
    console.log(top); 
    top+=5; 
    console.log(top); 
    top+="px"; 
    console.log(top); 
} 
run(); 
0

[OK]を、私はマイナーな変更のカップルをした:

  • topからtop1に変更されました。これは、ここではtopが既にサンドボックスに定義されており、使用できなかったという事実を克服することでした。
  • を追加する前に、top1を数値にキャストするために変更された1行が追加されました。

var top1 = "800px"; 
 
console.log(top1); 
 

 
var pos = top1.indexOf('px'); 
 
top1 = top1.substring(0,pos); 
 
console.log(top1); 
 
// Force top back to being a number 
 
top1 = +top1 + 5; 
 
console.log(top1); 
 
top1+="px"; 
 
console.log(top1);

関連する問題