컴퓨터 프로그래밍 언어의 한 종류로, 스크립트 작성 기능을 지원하는 소프트웨어(애플리케이션)을 제어하는 역할을 하는 언어로 정의되어 있다.
스크립트 언어는 컴파일 언어에 비해 단순하고 쉬운 문법 구조를 갖고 있다.
컴파일러 없이 명령어를 한줄씩 읽으면서 실행하므로, 번역속도는 빠르지만 프로그램 실행 시 매번 같은 코드를 번역해야 한다. 따라서 프로그램의 실행속도는 컴파일 언어에 비해 느리다.
CPU의 사용시간의 낭비가 크므로 복잡한 산술연산 혹은 복잡한 구조의 프로그램에서는 효율적이지 않을 수 있다.
컴파일 과정이 없기 때문에 프로그램을 실행시켜야 오류를 알 수 있다.
컴파일 과정이 없기 때문에, 소스 코드가 그대로 실행파일이 되어 메모리에 적재된다. 그 이후 런타임시 메모리가 명령어를 실행하기 위해 내부적으로 기계어로 변환하는 과정을 거친다.
JavaScript is an interpreted language
interpret
-> 이후에는 compile 된 machine code
로스크립트 언어는 인터프리터 언어이다.
한마디로 "승용차(인터프리터) vs 탱크(컴파일)" 경기인데, "소나타(스크립트)"가 등장한거다. 인터프리터가 더 큰 개념이다.
여기서 compiler 언어와 interpret 언어의 차이를 알아보자.
AJAX란, JavaScript의 라이브러리중 하나이며 Asynchronous Javascript And Xml(비동기식 자바스크립트와 xml)의 약자이다. 브라우저가 가지고있는 XMLHttpRequest 객체를 이용해서 전체 페이지를 새로 고치지 않고도 페이지의 일부만을 위한 데이터를 로드하는 기법 이며 JavaScript를 사용한 비동기 통신, 클라이언트와 서버간에 XML 데이터를 주고받는 기술이다.
즉, 쉽게 말하자면 자바스크립트를 통해서 서버에 데이터를 요청하는 것이다.
Unicode character set : 대소문자를 구분한다.
comments
// This is a single-line comment.
/* This is also a comment */ // and here is another comment.
/*
* This is yet another comment.
* It has multiple lines.
*/
multiline과 inline 차이만 구분하시면 될듯
let currentTempC = 22; // 섭씨 온도 22도
currentTempC = 24;
let targetTemp; // let targetTemp = undefined와 같음
const ROOM_TEMP_C = 21; // 통상적으로 대문자 & Underbar 사용
첫글자는 숫자로 시작해선 안되고 특수문자는
$
,_
이외에는 불가한 것으로..
예) break delete function return typeof case do if switch var catch else in this void continue false instanceof throw while debugger finally new true with default for null try let const
currentTempC
current_temp_c
클래스를 제외한 식별자는 대문자로 시작해서는 안 된다.
The word literal means that you’re providing the value directly in the program.
Essentially, a literal is a way to create a value;
JavaScript takes the literal value you provide and creates a data value from it.
내장 객체 (built-in objects)
• Array is a special kind of object: represent an ordered collection of
numbered values
• Date, RegExp, Map(& WeakMap), Set (& WeakSet)
• Boolean, String, Number Objects: primitive type에 대응하는 객체 타입
Symbol is a new data type representing unique tokens. Once you create a symbol, it is unique: it will match no other symbol.
const RED= Symbol('color')
const ORANGE = Symbol('color')
console.log(RED)
console.log(ORANGE)
console.log(RED==ORANGE)
console.log(RED===ORANGE)
\
)const dialog = "Sam looked up and said "don't do that!" to Max."; // error
const dialog1 = "He looked up and said \"don't do that!\" to Max.";
이외 또 다른 이스케이프 문자들이 존재한다.
let currentTemp = 19.5;
// 00b0 is the Unicode code point for the "degree" symbol
const message = `The current temperature is ${currentTemp}\u00b0C`;
let currentTemp; // implicit value of undefined
const targetTemp = null; // targetTemp null -- "not yet known"
currentTemp = 19.5; // currentTemp now has value
currentTemp = undefined; // currentTemp appears as if it had never
// been initialized; not recommended
할당한 값을 다시 null이나 undefined해도 오류가 생기지는 않는다.
sam3.speak = function() { return "Meow!"; };
sam3.speak();
delete sam3.speak
delete sam3.speak()
는 삭제되지 않으니 조심하길
소괄호 넣으면 안돼
// An object is a collection of name/value pairs, or a string to value map.
const book = { // Objects are enclosed in curly braces.
topic: "JavaScript", // The property "topic" has value "JavaScript".
useful: true // The property "fat" has value true.
}; // The curly brace marks the end of the object.
// Access the properties of an object with . or [ ]:
book.topic // => "JavaScript"
book[“useful"] // => true: another way to access property values.
book.author = “Ethan"; // Create new properties by assignment.
[ ]
not homogeneous의 의미
const arr = ['a', 'b', 'c',7,Symbol("color")];
console.log(arr)
일반적인 array는 동일한 데이터형끼리만 가능했었다 하지만 데이터 type이 다른 변수끼리 저장이 가능하다는 의미이다.
// Arrays and objects can hold other arrays and objects:
let points = [ // An array with 2 elements.
{x:0, y:0}, // Each element is an object.
{x:1, y:1}
];
let data = { // An object with 2 properties
trial1: [[1,2], [3,4]], // The value of each property is an array.
trial2: [[2,3], [4,5]] // The elements of the arrays are arrays.
};
배열안의 배열, object 내부에 배열도 가능!
10 + " objects" // => "10 objects". Number 10 converts to a string
'10' + 2 // '102'
5 * '10' // 50
1 - '1' // 0
1/ 'one' // NaN
"7" * "4" // => 28: both strings convert to numbers
자동 형변환에 대해서 좀 더 자세히.. 예외적인 상황들 책에서 가져오기
An expression is a phrase of JavaScript that a JavaScript interpreter can evaluate to produce a value. (값으로 평가될 수 있는 문, phrase) -> you can print or assign it to a variable
let x, y;
y = x = 3 * 5; // original statement
y = x = 15; // multiplication expression evaluated
y = 15; // first assignment evaluated; x now has value 15, y is still undefined
15; // second assignment evaluated; y now has value 15,
// the result is 15, which isn't used or assigned to
// anything, so this final value is simply discarded
Operator precedence (연산자 우선순위)에 따라 평가(evaluate)됨
Most expressions, such as multiplication and assignment, are operator
expressions.
Primary expressions
(Complex) Expressions
X * Y
<- evaluates to (returns) the product of the values of the expressions X and Y (operands) where the *
is the operator.console.log(4 * 3 ** 2)
const a = 4 ** 3 ** 2; // Same as 4 ** (3 ** 2); evaluates to 262144
const b = 4 / 3 / 2; // Same as (4 / 3) / 2; evaluates to 0.6666...
console.log(1 + 2 ** 3 * 4 / 5 >> 6) // 7>>6
a || (b * c); // evaluate `a` first, then produce `a` if `a` is "truthy"
a && (b < c); // evaluate `a` first, then produce `a` if `a` is "falsy"
a ?? (b || c); // evaluate `a` first, then produce `a` if `a` is not `null` and not `undefined`
function A() { console.log('called A'); return false; }
function B() { console.log('called B'); return false; }
function C() { console.log('called C'); return true; }
console.log(C() || B() && A());
// Logs:
// called C
// true
function* foo() {
a + yield 1;
}
yield 1
보다 + 연산자의 우선순위가 높기 때문에 실제로 (a+yield) 1;
로 해석되어 문법 오류가 발생한다.
올바른 코드로 고치면 다음과 같다.
function* foo() { let a = yield 1; }
여기서 let a를 사용하여 변수 a를 선언하고, yield 구문을 이용하여 값을 받습니다. 이렇게 하면 코드가 제대로 작동할 것입니다. 단, yield로 받은 값은 다음 .next() 호출에서 전달됩니다
async function* foo() {
await yield 1;
}
yield
보다 await
연산자의 우선순위가 높기 때문에 await (yield 1);
로 해석되어 문법 오류가 발생하지 않는다.
a?.b.c; // evaluate `a` first, then produce `undefined` if `a` is `null` or `undefined`
?.은 ?.'앞’의 평가 대상이 undefined나 null이면 평가를 멈추고 undefined를 반환합니다.
?가 없다면 // TypeError: Cannot read property 'street' of undefined가 발생한다.
const n = 5;
const s = "5";
n === s; // false -- different types
n !== s; // true
n == s; // true; not recommended
n != s; // false; not recommended
const a = { name: "an object" };
const b = { name: "an object" };
a === b; // false -- distinct objects
a !== b; // true
a == b; // false; not recommended
a != b; // true; not recommended
&&
)||
)!
)if(!options) options = {}; can be easily translated to: options = options || {};
'' 은 false, ' ' 은 true값임.
const doIt = false;
const result = doIt ? "Did it!" : "Didn't do it.";
if
statement - use this statement if you want to execute some code only if a specified condition is trueif...else
statement - use this statement if you want to execute some code if the condition is true and another code if the condition is falseif...else if....else
statement - use this statement if you want to select one of many blocks of code to be executedswitch
statement - use this statement if you want to select one of many blocks of code to be executed<!DOCTYPE html>
<html>
<body>
<script>
for (let i=0;i<=10;i++){
if (i==3){
continue;
}
document.write("The number is " + i);
document.write("<br />");
}
</script>
</body>
</html>