5. Quy ước: mầu nền
PHP và JS khác nhau: nền đen, chữ trắng
HOCTUDAU.COM DANG MINH TUAN
6. Phần 1: Vai trò của JS
trong thế giới web hiện đại
HOCTUDAU.COM DANG MINH TUAN
7. Cơ duyên nào đưa bạn đến với
PHP?
● Đầu tiên là học làm web tĩnh: HTML, CSS
trước.
● Một số người biết JS trước cả PHP
● Sự thực: một số lập trình PHP không giỏi
HTML, CSS, JS nhưng đa số đều biết
HTML, CSS, JS ở mức độ nào đó. Hiếm ai
(tôi chưa gặp ai) chỉ biết mỗi PHP!
HOCTUDAU.COM DANG MINH TUAN
8. Tại sao lập trình viên PHP nên học
(và giỏi) Javascript
● Trong quá khứ xa: ứng dụng web tập trung
vào server-side hơn.
● Thời gian gần đây: client side trở nên phức
tạp hơn và thực hiện nhiều nhiệm vụ hơn
(richer). Web apps cân bằng hơn giữa client
side và server side (thậm chí là client side
nhỉnh hơn).
● HTML, CSS, JS làm được nhiều thứ!!!.
● Học không có nghĩa là "copy & paste", hoặc
biết dùng "tool sinh code" => học như bạn
đã học PHP
9. JS làm được gì?
Tạo ứng dụng mobile bằng HTML, CSS, JS với
các Web RunTime platforms (WRTs)
● iPhone — Titanium Mobile, PhoneGap
● Android — Titanium Mobile, PhoneGap)
● Palm webOS — Mojo
● Sony Ericsson — Sony Ericsson WebSDK
(PhoneGap)
● Nokia — Nokia WRT
● Blackberry — PhoneGap
HOCTUDAU.COM DANG MINH TUAN
10. JS làm được gì?
Và nhiều thứ khác
● Brower Extensions: Firefox Addons, Google
Chrome Extensions ...
● Desktop Application: Windows 8 Apps,
Google Chrome Package Apps, ...
● Google Script (Google Forms,
Spreadsheet...): Enterprise Apps
● Web Games, Web Apps
● Server side: Node.js
HOCTUDAU.COM DANG MINH TUAN
11. Cần học những gì của JS?
Không chỉ đơn giản là "tooltip", "menu",
"chuyển động". Mà còn là:
● Quản lý và thực thi những hành vi người
dùng phức tạp ở giao diện người dùng (UI).
● Tương tác với API ở client: DOM, local
storage ...
● Kể cả học các Framework như jQuery thì
cũng cần nắm vững căn bản về JS (sẽ liệt
kê kiến thức ở phần cuối bài thuyết trình) vì
làm jQuery cũng vẫn dùng cái đó.
HOCTUDAU.COM DANG MINH TUAN
12. Tin tốt
● Javascript có cú pháp C-Like (NHƯ PHP).
Nếu bạn thực hiện những toán đơn giản:
cộng, trừ, tính số PI, tính sin... thì có thể
code hoàn toàn như PHP.
● Việc học tập giúp bạn trở nên thông minh
hơn, học nhanh hơn, đáp ứng được nhiều
yêu cầu (tuyển dụng, của khách...) hơn.
● Bây giờ có nhiều JS Frameworks rất tốt:
jQuery,...
● Cộng đồng JS dev: đa dạng, sáng tạo, đông
đảo
HOCTUDAU.COM DANG MINH TUAN
13. Tin xấu
Vài thứ khá khác biệt
● Object Model dễ gây hiểu lầm
● Scope rất khác biệt
● Khả năng tùy biến: rất quái dị
● và nhiều khác biệt khác
HOCTUDAU.COM DANG MINH TUAN
14. Học ở đâu và như thế nào?
Rất nhiều link, sách lởm: lạc hậu hoặc tập
trung vào các "công thức".
Vài nguồn đáng tham khảo:
● Mozilla’s Core JavaScript Guide
● Mozilla’s Core JavaScript Reference
● Eloquent JavaScript
● JavaScript: The Definitive Guide
HOCTUDAU.COM DANG MINH TUAN
15. Phần 2: Vài kiến thức JS
cơ bản
học nhanh JS trong 15 phút, dành cho
những lập trình viên PHP chưa biết hoặc
chỉ biết một chút về JS
HOCTUDAU.COM DANG MINH TUAN
16. Chú ý
bạn là PHP developer, tức là coi như bạn đã
biết kiến thức căn bản và tư duy lập trình:
● bản chất của biến, đối tượng
● các kiểu biến: số, chuỗi, mảng, lớp ...
● phép gán, biểu thức, biểu thức chính quy ...
● các phép toán, toán tử ...
● lệnh điều kiện (rẽ nhánh): if, else, switch ...
● vòng lặp: while, do, for ...
● nguyên lý DRY
17. Đặt tên biến: Giống
$n = 1; $n = 1;
$b = true; $b = true;
$s = "hoc tu dau"; $s = "hoc tu dau";
HOCTUDAU.COM DANG MINH TUAN
18. Đặt tên biến: Khác
n=1 $n = 1;
$ = 1;
var n = 1;
var x = 0, y = ''; $x = 0; $y = '';
HOCTUDAU.COM DANG MINH TUAN
19. Khai báo biến: Mảng
var a = [1,2,3]; $a = array(1,2,3);
HOCTUDAU.COM DANG MINH TUAN
21. Khai báo biến: Mảng liên kết (assoc)
var o = { $o = array(
"one":1, "one"=>1,
"two":2 "two"=>2
}; );
PHP 5.4
["one"=>1, "two"=>2]
22. Bản chất và Nhập dữ liệu
Javascript: Chạy ở client-side PHP: chạy ở server và lấy được dữ
<div id="x">5</div> liệu gửi từ client-side lên
<input id="y"> <form>
<script> <input name="y">
a = document.getElementById("x"); <input type="submit">
b = a.innerHTML; </form>
c = document.getElementById("y"); <?php
d = c.value; $a = $_GET['y'];
HOCTUDAU.COM DANG MINH TUAN
23. Bản chất và Xuất dữ liệu
Javascript: Chạy ở client-side PHP: chạy ở server và gửi được dữ
<div id="x">5</div> liệu xuống client-side
<input id="y"> <form>
<script> <input name="y">
a = document.getElementById("x"); <input type="submit">
b = a.innerHTML; </form>
a.innerHTML = 2 * b; <?php
c = document.getElementById("y"); $a = $_GET['y'];
d = c.value; echo 2 * $a;
c.value = 3 * d;
32. PHP Class
Class class OnlineCenter {
var $name; //PHP 4
public $name; //PHP 5
JS constructor function
function __construct($name) {
function OnlineCenter(name) {
$this->name = $name;
this.name = name;
}
this.getName = function () {
function getName() {
return this.name;
return $this->name;
}
}
}
}
var hoctudau = new OnlineCenter
$hoctudau = new OnlineCenter
("HocTuDau");
("HocTuDau");
hoctudau.getName(); //HocTuDau
hoctudau->getName();//HocTuDau
33. PHP Class
Class class OnlineCenter {
var $name; //PHP 4
public $name; //PHP 5
JS Prototype
function __construct($name) {
function OnlineCenter (name) {
$this->name = $name;
this.name = name;
}
}
function getName() {
OnlineCenter.prototype.getName =
return $this->name;
function() {
}
return this.name;
}
}
$hoctudau = new OnlineCenter
var hoctudau = new OnlineCenter ("HocTuDau");
("HocTuDau");
hoctudau->getName();//HocTuDau
hoctudau.getName(); //HocTuDau
39. Literals
var o = {}; var o = new Object();
var a = []; var a = new Array();
var re = /[a-z]/gmi; var re = new RegExp("[a-z]", "gmi");
var f = function(..) {...} var f = new Function("..","...");
function f(..) {...}
var s = 'hoctudau'; var s = new String('hoctudau');
var n = 123; var n = new Number(123);
var b = true; var b = new Boolean(true);
41. Array.prototype
var a = [1,2,3,4];
a.length; // 4
a.push('hoc tu dau'); //[1,2,3,4,'hoc tu dau']
a.pop(); //[1,2,3]
a.unshift('hoc tu dau'); //['hoc tu dau',1,2,3,4]
a.shift(); //[2,3,4]
a = a.concat(5,6,'htd'); //[1,2,3,4,5,6,'htd']
HOCTUDAU.COM DANG MINH TUAN
47. Math
Constants
● Math.E, Math.PI ... and about 6 more
Methods
● Math.min(), Math.max(),
● Math.random(), Math.round(), Math.sin(),
● ... and about 14 more ...
HOCTUDAU.COM DANG MINH TUAN
48. Date
var d = new Date(2012, 12, 21);
d.getDate(); //21
d.getDay(); //1
d.getFullYear(); //2013 !!!
d.getMonth(); //0 !!!
d.getHours();
d.setFullYear(); d.setHours(); ...
d.toString(); d.toTimeString(); d.toDateString();...
Date.now(); Date.parse(); ...