プログラミング日記

プログラミング、英語、アメリカ、Apple、自転車とか

JavaScript, == と === の違い

今日知ったのでメモ。

var foo = 3;
var bar = "3";

console.log("foo == bar: " + (foo == bar));
console.log("foo === bar: " + (foo === bar));

var str1 = "String1";
var str2 = new String('String1');

console.log("str1 == str2: " + (str1 == str2));
console.log("str1 === str2: " + (str1 === str2));
-- 結果 --
foo == bar: true
foo === bar: false
str1 == str2: true
str1 === str2: false

== と === の違い

fooとbarでは、StringとNumberとデータ型が異なるのでfalseが返ってくる。
str1とstr2では、プリミティブ型とオブジェクト型に異なるので、これまたfalseが返ってくる。

barを3.0にしてもtrueが返ってくるのは、JavaScriptがintとかfloatみたいに整数と浮動小数点値をタイプ分けせず、Numberに統一しているからだと思う。

データ型 (JavaScript)

Rubyの配列について

もしかしたら他の言語の配列もそうなるかもだけど、
Rubyの配列は他のオブジェクトへの参照を含むので、同じポインタにアクセスしているってわけだと思う。

str = "Hello"
str_array = [str, str]
str[2] = "u"
puts str_array

ー 結果 ー
Heulo
Heulo
=> nil

追記
Rubyの値は全てオブジェクト(参照型)だからこうなるのだと思う。

jQueryにおける、append()とhtml()の違い

最近、例のJavaScriptの本を読み終えた。
タイトルの通り、なかなか本格的な本だった。
関数の引数や、オブジェクト指向の部分なんかは他の言語と違った、JavaScriptの特徴を詳しく解説していてわかりやすかった。
ただ、まったくのプログラミング初心者が最初に読む本ではない。
他の言語の経験者、どちらかというとJavaC++などのクラスベースのオブジェクト指向言語をやったことがある人が読むのに適している本だと思う。

最近はjQueryJavaScriptのライブラリとかをいじって遊んでいる。

jQueryで$.html()と$.apend()の違いをメモっとく。

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Text jQuery</title>
</head>
<body>
	<p>Practice</p>
	<div>
		<p>hi1</p>
		<p>hi2</p>
		<p>hi3</p>
	</div>
	<script src="jquery.js"></script>
	<script>
		$(function() {
			$('div').html('<p>hi4</p>');
		});
	</script>
</body>
</html>

上のように$.html()を使うと、$('div')の子要素は上書きされて、

hi4

だけしか表示されない。

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Text jQuery</title>
</head>
<body>
	<p>Practice</p>
	<div>
		<p>hi1</p>
		<p>hi2</p>
		<p>hi3</p>
	</div>
	<script src="jquery.js"></script>
	<script>
		$(function() {
			$('div').append('<p>hi4</p>');
		});
	</script>
</body>
</html>

htmlの部分をappendに変えただけのコードだけど、このコードでは、

hi4

はdiv要素に「追加」されるので、もともとあったp要素も削除されずに済んだりする。

以上。

留学、、、

タイトルに留学、英語が云々とか書いてあります。

今回はそのお話をしたいと思う。

僕はもともと海外とか英語とか興味があった。

去年、初めてアメリカに短期留学にいった。

生まれて初めて日本人がいないところで1ヶ月生活し、生まれて初めて親なしで1ヶ月暮らした。

高校はアメリカに進学しようと決めた。

問題が一つ起きた。僕が入りたい高校はTOEFLを55点(iBT)取らないと入れてくれないらしい、(英検2級程度)
まともにテスト勉強なんてしたことのない僕が勉強を始めた。

まずどうにかしないといけないのは、ボキャブラリーからだと思った。
やったことは何個かあって、

独り言は英語にした。(これはがボキャブラリーを広げたかなぁ?)
思いついた単語をとりあいず調べてみる、
字幕で洋画を見ながら、よくわかんない単語を調べる。
覚えた単語と一緒に、対義語とか同義語も覚えちゃう。

僕の頭のハードディスクは普通の人のそれよりも壊れやすかったりするんで、思いついた単語やわかんなかった単語で同じのが何回も出てきたりする。

ある程度単語力がついてくると、簡単な読みものとかの意味くらいは推測できるようになる。

単語力だけだと、文章を読むのではなく、推測になってしまうので英文法を学んだ。
Forestっていう参考書を読んだり、日記を書いたりして覚えた。

リスニングは、YouTubeを英語でみたり、洋画を観まくったり、洋楽を聴きまくった。
わからない単語は、その都度チェックした。単語は発音することが大切だと思う。発音できない単語は、基本的に聞き取れない。

Speakingは、それ専用のクラスをとった。TOEFLの中で一番むずい。詳しくは、ググってください。

こんなかんじで、去年の11月にTOEFLを受けた時は、59点とれた。勉強期間は、3ヶ月くらいかな。
大した点数じゃないですけれど、皆さんも参考にしてみてください。僕も現在進行形で勉強しています。

JavaScript、this.<method>と<Object>.prototype.<method>の違い。

今日も相変わらず例の本を読みながらJavaScriptの勉強をしている。学習スピードが異常に遅いけれど。

function Triangle() {
	var _base;
	var _height;

	var _checkArgs = function(val) {
		return (!isNaN(val) && val > 0);
	};

	this.setBase = function(base) {
		if(_checkArgs(base)) { _base = base; }
	};

	this.setHeight = function(height) {
		if(_checkArgs(height)) { _height = height; }
	};

	this.getBase = function() { return _base; };
	this.getHeight = function() { return _height; };

	Triangle.prototype.getArea = function() {
		return this.getBase() * this.getHeight() / 2;
	};
}

var t = new Triangle();
t.setBase(70);
t.setHeight(2);
document.writeln(t.getBase() + '<br />')
document.writeln(t.getHeight() + '<br />')
document.writeln(t.getArea());

-実行結果-

70
2
70

Triangleの中で定義する分には、this..prototype.のには違いがないと思う。
ただ、.prototype.はTriangleの外からでも定義できることは違うけど。
文章が読みにくくてすみません。