'12 Javascript'에 해당되는 글 31건

  1. 2023.01.03 null과 undefined 의 차이
  2. 2023.01.03 Javascript의 undefined는 정확히 무슨 뜻일까?
  3. 2023.01.03 [Javascript] 객체에 특정 속성이 존재하는지 체크하는 3가지 방법
  4. 2023.01.03 자바스크립트 parseInt()등 타입 변환 함수들 1
  5. 2023.01.03 자바스크립트-String(slice, substring, substr, replace, replaceAll, includes, split, trim)
  6. 2023.01.03 javascript를 이용해서 페이지 내 특정 DOM 객체가 존재 확인
  7. 2021.07.29 ---21 배열 명령어 concat등 알아보기
  8. 2021.07.29 ---10 자바스크립트의 객체 및 변수 개념잡기
  9. 2021.07.29 00 자바스크립트란?
  10. 2021.07.29 ---20 자바스크립트 객체, 속성, 메소드 이해하기
  11. 2021.07.29 ---20 객체와 배열이란?
  12. 2021.07.16 30 parseInt 와 Number비교
  13. 2021.07.16 30 대소문자전환 toUpperCase() toLowerCase()
  14. 2021.07.16 30 replace 문제점
  15. 2021.07.16 31 날자관련 각종 utils
  16. 2021.07.16 31 날자관련 두 날자사이에 시간을 계산한다
  17. 2021.07.16 31 날자관련 날자계산
  18. 2021.07.16 11 switch case문 1
  19. 2021.07.15 객체의 활용 (객체내에 생성자, 변수(메소드)추가 삭제(delete))
  20. 2021.07.15 10 객체 생성 및 접근 (for , in , with사용)
  21. 2021.07.15 인코더(Encoder), Eval함수 ,숫자변환함수
  22. 2021.07.15 10 Function(함수)
  23. 2021.07.15 10 제어문(if 문 , for 문)
  24. 2021.07.15 10 변수의 선언
  25. 2021.07.15 10 출력문(document.write // Console.log //alert)
  26. 2021.07.15 10 Java Script 개요와 개발환경설정
  27. 2021.07.15 ---10 배열 선언및 출력
  28. 2018.07.18 31 날자관련 var d = new Date();
  29. 2013.01.18 30 substring과 substr의 차이
  30. 2013.01.11 <body onload=""> 그리고 window.onload와 window::onload()의 차이

JavaScript에는 '없음'를 나타내는 값이 두 개 있는데, 바로 null와 undefined입니다. 두 값의 의미는 비슷하지만, 각각이 사용되는 목적과 장소가 다릅니다.

JavaScript는 값이 대입되지 않은 변수 혹은 속성을 사용하려고 하면 undefined를 반환합니다.

 
let foo;
foo // undefined
 
const obj = {};
obj.prop; // undefined

null은 '객체가 없음'을 나타냅니다. 실제로 typeof 연산을 해보면 아래와 같은 값을 반환합니다.

 
typeof null // 'object'
typeof undefined // 'undefined'

그렇다면 개발자의 입장에서 '없음'을 저장하기 위해 둘 중 어떤 것을 써야 할까요? undefined를 쓴다고 가정해보면, 아래와 같은 코드는 그 의미가 불분명해집니다.

 
let foo; // 값을 대입한 적 없음
let bar = undefined; // 값을 대입함
foo; // undefined
bar; // undefined (??)
let obj1 = {}; // 속성을 지정하지 않음
let obj2 = {prop: undefined}; // 속성을 지정함
obj1.prop; // undefined
obj2.prop; // undefined (??)

비록 undefined가 '없음'을 나타내는 값일지라도, 대입한 적 없는 변수 혹은 속성과, 명시적으로 '없음'을 나타내는 경우를 구분을 할 수 있어야 코드의 의미가 명확해 질 것입니다. 프로그래머의 입장에서 명시적으로 부재를 나타내고 싶다면 항상 null을 사용하는 것이 좋습니다.

다만, 객체를 사용할 때 어떤 속성의 부재를 null을 통해서 나타내는 쪽보다는, 그냥 그 속성을 정의하지 않는 방식이 간편하므로 더 널리 사용됩니다.

 
// 이렇게 하는 경우는 많지 않습니다.
{
name: 'Seungha',
address: null
}
 
// 그냥 이렇게 하는 경우가 많습니다.
{
name: 'Seungha'
}
 
// 어쨌든 이렇게 하지는 말아주세요.
{
name: 'Seungha',
address: undefined
}

Null Check

null이나 undefined는 어떤 변수에도, 어떤 속성에도 들어있을 수 있기 때문에 우리는 코드를 짤 때 값이 있는 경우와 없는 경우 (즉 null 혹은 undefined인 경우)를 모두 고려해서 코드를 짜야 할 필요가 있습니다. 어떤 값이 null 혹은 undefined인지 확인하는 작업을 null check라고 합니다. null check는 간단히 등호를 이용해서 할 수 있습니다.

 
function printIfNotNull(input) {
if (input !== null && input !== undefined) {
console.log(input);
}
}

그런데 매 번 위처럼 긴 비교를 해야 한다는 것은 골치아픈 일입니다. 사실은 위 if 구문 안에 있는 식을 다음과 같이 줄여 쓸 수 있습니다.

 
// 아래 세 개의 식은 완전히 같은 의미입니다.
input !== null && input !== undefined;
input != null;
input != undefined;
 
// 아래 세 개의 식은 완전히 같은 의미입니다.
input === null || input === undefined;
input == null;
input == undefined;

이제까지 세 글자 짜리 등호만을 소개했는데, 사실 JavaScript에는 두 글자 짜리 등호도 있습니다. 각각의 공식적인 명칭은 strict equality comparison operator, abstract equality comparison operator 입니다. 이름에서도 알 수 있듯이, 대개 ===는 값이 정확히 같을 때 true라는 결과값을 반환하고, ==는 그렇지 않을 때가 많습니다. 그래서 보통의 경우 ===를 사용하는 것이 권장되는 편입니다.

다만 null check를 할 때 만큼은 ==를 쓰는 것이 편리합니다. 아래 예제를 통해 설명하겠습니다.

==와 === 두 연산자는 null과 undefined에 대해서 아래와 같이 동작합니다.

 
null === undefined; // false
null == undefined; // true
 
null == 1 // false
null == 'hello' // false
null == false // false
 
undefined == 1 // false
undefined == 'hello' // false
undefined == false // false

즉, == 연산자는 한 쪽 피연산자에 null 혹은 undefined가 오면, 다른 쪽 피연산자에 null 혹은 undefined가 왔을 때만 true를 반환하고, 다른 모든 경우에 false를 반환합니다.

따라서 null check를 할 때 만큼은 ==를 사용하는 것이 편합니다. 다른 모든 경우에는 ===를 사용하는 것이 좋습니다.

===와 ==에 대한 자세한 내용은 연산자 더 알아보기 챕터에서 다룹니다.

 

출처 : https://helloworldjavascript.net/pages/160-null-undefined.html

Posted by useways
,

Undefined? (null이랑 같은건가?)

자바스크립트에서는 (자바 같은 언어와 달리) 변수의 자료형을 별도로 표기하지 않고, 변수에 담기게 되는 값에 따라 자료형이 결정되게 됩니다. 이러한 특징때문에 undefined라는 상태를 다루게 되는데, 'undefined'라는 키워드는 해당 변수의 자료형이 정해지지 않았음을 나타냅니다.

 

  • undefiend : 변수는 존재하나, 어떠한 값으로도 할당되지 않아 자료형이 정해지지(undefined) 않은 상태입니다.
  • null : 변수는 존재하나, null 로 (값이) 할당된 상태. 즉 null은 자료형이 정해진(defined) 상태입니다.
var var1; //undefined (어떤 값도 할당되지 않아서 자료형을 알 수 없음)
var var2 = null; //null (null로 (값이) 할당되어서 자료형을 알 수 있음 - null의 자료형은 object다.)

undefined와 null은 '값이 없다' 라는 점에서 유사하지만 엄밀히 말하면 다른 개념입니다. 

 

(+ typeof 연산자로 타입을 확인해보면 undefined는 undefined 타입이, null은 object 타입이라고 표시됩니다.)

 

undefined == null 은 true 나온던데?

하지만 자바스크립트 undefined == null을 비교하면 true값이 나오게 됩니다. 이는 자바스크립트 == 연산자의 자동 형변환 기능때문입니다.

 

자바스크립트에서 숫자 1과 문자 '1'을 비교 할 때 == 연산자를 사용하면 true가 나오지만, 타입까지 엄격히 검사하는 === 연산자를 사용하면 false가 나오게 됩니다.

1 == '1' //true
1 === '1' //false

 

이와 유사하게 undefined와 null도 == 연산자와 === 연산자의 결과가 다르게 나옵니다.

undefined == null //true
undefined === null //false

 

출처 : https://siyoon210.tistory.com/148

 

참고

Posted by useways
,

Javascript의 객체에 특정 속성이 존재하는지 체크하는 방법 3가지를 소개합니다.

출처: https://hianna.tistory.com/420

 

1. hasOwnProperty() 함수

 

 

 

hasOwnProperty 함수는 파라미터로 전달된 property(속성)가 객체에 존재하면 true를 리턴하고,

그렇지 않으면 false를 리턴합니다.

 

 

 

2. in 연산자 사용하기

 

in 연산자도 hasOwnProperty 함수와 비슷하게 객체에 프로퍼티가 있으면 true를 리턴하고, 

그렇지 않으면 false를 리턴합니다.

 

 

그렇다면,

hasOwnProperty() 함수와 in 연산자의 차이는 무엇일까요?

hasOwnProperty() vs in 연산자 차이

 

toString 메소드는 모든 객체가 공통적으로 가지는 속성입니다.

hasOwnProperty 메소드는, 이렇게 객체로부터 상속받은 속성을 체크하면 false를 리턴합니다.

in 연산자의 경우에는, toString과 같이 객체로부터 상속받은 속성을 체크하면 true를 리턴합니다.

 

 

 

3. undefined와 비교하기

 

'person.age'와 같이, 객체에 존재하지 않는 속성(property)에 접근하면 undefined가 리턴됩니다.

이런 특징을 이용해서, 객체에 특정 속성이 존재하는지 여부를 체크할 수 있습니다.

 

주의할 점

 

위 예제의 경우, person 객체에 age 속성이 존재하지만, 그 값이 undefined로 정의되어 있습니다.

이 경우, person.age를 undefined 값과 비교하면 true를 리턴합니다.

따라서, 이 경우에는 원하는 결과와 다른 값을 얻게 됩니다.

실제로 속성이 존재하지만, 속성값이 undefined이기 때문에, 

위 코드에서는 마치 age 속성이 존재하지 않는 것과 같은 결과를 얻게됩니다.

 


 

객체에 특정 속성이 존재하는지 여부를 체크하는 방법 3가지를 알아보았습니다.

 

 정리 

1. hasOwnProperty() 함수

 - toString과 같은 객체로부터 상속받은 속성은 체크되지 않습니다.

 

2. in 연산자 사용하기

 - toString과 같은 객체로부터 상속받은 속성까지 모두 체크됩니다.

 

3. undefined와 비교하기

 - 속성 값이 undefined인 경우, 속성이 존재하지 않는 것처럼 체크됩니다.

 

 

 

Posted by useways
,

▶들어가기 전

자바스크립트는 느슨한 타입을 가진 언어이기 때문에 관대한 타입 변환을 수행합니다.

이런 부분은 많은 개발자가 자바스크립트를 이해하기 힘들어하고 싫어하는 이유이기도 합니다.

앞으로 자바스크립트의 타입 변환 규칙을 ECMAScript에 명시된 명세를 기준으로 알아볼 것입니다.

이 내용들은 어떤 식으로 타입 변환을 제어하는 것이 좋을지 판단할 때 큰 도움이 될 것입니다.

또한, 자바스크립트의 꽃이라고도 할 수 있는 함수의 선언과 호출 방법 그리고 this 바인딩에 대해 다룰 것입니다.

언급한 내용 모두 자바스크립트에서 혼란스럽게 여겨지지만, 알아보고 나면 생각보다 간단한 규칙이 있다는 것을 이해할 수 있을 것입니다.

 

▶타입 변환

자바스크립트에서 타입 변환을 이해하는 것은 매우 중요합니다.

어떤 경웨 데이터 타입 변환이 발생하는지를 알아야, 의도한 대로 동작하는 코드를 작성할 수 있습니다.

 

자바스크립트의 타입 변환은 명시적 강제 변환, 암시적 강제 변환 두 가지가 있습니다.

둘의 차이는 명확합니다.

명시적 강제 변환은 의도적인 타입 변환을 나타내는 것이고, 암시적 강제 변환은 표현식의 평가 중 타입이 변환되는 것입니다.

 

1) 명시적 강제 변환

명시적 강제 변환은 명확하게 의도를 갖고 타입을 변환하는 것입니다.

문자열, 숫자, 불리언 타입 별로 몇 가지 방법이 있습니다.

▷문자열로 변환

문자열로 변환하는 가장 간단한 방법은 [랩퍼 객체]에서 보았던 String() 함수를 호출하는 것입니다.

new 키워드를 붙이지 않고 String() 함수를 호출하면 랩퍼 객체를 생성하는 것이 아니라 타입 변환 함수로 동작합니다.

console.log(String(3)); // '3'
console.log(String(false)); // 'false'
console.log(String(null)); // 'null'

그렇다면 다른 타입에서 문자열 타입으로의 변환은 어떤 기준으로 이뤄지는 것일까요?

다음 표에서 볼 수 있듯이 타입별로 문자열 변환 방법이 정해져 있습니다.

ECMAScript에서는 이 규칙을 ToString() 추상 연산이라고 명시하고 있으며, 명시적이든 암시적이든 문자열로 변환될 때 수행됩니다.

 

[NOTE]

정확히 말하면 String() 함수는 심볼 이외의 타입에 대해서 ToString 추상 연산을 따릅니다.

심볼 타입의 경우 SymbolDescriptiveString 연산을 통해 변환됩니다.

타입 문자열 변환 결과
undefined 'undefined'
null 'null'
boolean true → 'true', false → 'false'
number Number.toString() 변환 결과(3 → '3')
Symbol 문자열로 변환을 시도하는 경우 TypeError 발생
BigInt BigInt.toString()의 결과 반환(3n → '3n')
object 객체를 원시 타입으로 변환한 후 다시 한번 ToString 추상 연산을 수행한 값을 반환합니다.
객체를 원시 타입으로 변환하는 과정을 정확히는 ToPrimitive 추상 연산이라고 합니다.
const boolVal = true;
const numVal = 2;

console.log(String(boolVal)); // 'true'
console.log(String(numVal)); // '2'

 

[NOTE]

심볼은 연산을 통해 문자열 또는 숫자로 변환될 경우 TypeError가 발생합니다.

이는 심볼이 변환되어 객체의 다른 프로퍼티에 접근하는 것을 방지하기 위해서입니다.

myobject['__' + Symbol('key')]; // TypeError

또 다른 문자열 변환 방법은 toString() 메서드를 사용하는 것입니다.

const num = 4;
console.log(num.toString()); // '4'
  • String()과 toString()의 차이점

앞서 살펴본 String()과 toString()은 대부분 동일한 결과를 반환하지만, 그렇지 않은 경우도 있습니다.

null undefined 타입이 그에 해당합니다.

console.log(String(null)); // 'null'
console.log(String(undefined)); // 'undefined'

undefined.toString(); // TypeError 발생
null.toString(); // TypeError 발생

예제 코드의 결과는 당연합니다.

null과 undefined 타입은 값이 비어 있음, 할당되지 않은 상태를 나타내는 원시 타입이므로  toString() 메서드를 호출할 수 있다는 논리상 말이 되지 않습니다.

또한 이 타입들은 객체가 아니기 때문에 객체에서 사용할 수 있는 프로퍼티들을 사용할 수 없는 것이 옳습니다.

반면, String() 함수의 경우에 심볼 이외의 모든 타입이 위에서 정의된 규칙을 정확하게 따르기 때문에 문자열로 명시적 강제 변환을 하고 싶은 경우에는 toString() 메서드보다는 String() 함수를 사용하는 것이 더 적합합니다.

 

▷숫자로 변환

숫자로의 변환도 문자열과 유사하게 Number() 함수를 호출하여 변환하는 방법이 있으며, BigInt 타입을 제외한 데이터는 ECMAScript의 ToNumber 추상 연산 명세를 기준으로 변환됩니다.

 

[NOTE]

숫자로의 변환 시 정확히는 ToNumber 추상 연산 명세를 기준으로 하여, 여기서 몇 가지 단계를 거쳐 ToNumber 추상 연산을 실행합니다.

타입 숫자 변환 결과
undefined NaN
null +0
string 숫자로 변경이 불가능한 값 → NaN, 숫자형 문자열 → 숫자
boolean true → 1, false → 0
Symbol 숫자로 변환을 시도하는 경우 TypeError 발생
BigInt 숫자로 변환을 시도하는 경우 TypeError 발생
object 객체를 원시 타입으로 변환한 후 다시 한번 ToNumber 추상 연산을 수행한 값을 반환
console.log(Number('3')); // 3
console.log(Number(true)); // 1
console.log(Number(null)); // 0

[NOTE]

BigInt 타입은 연산 중 숫자로 변환되는 것을 방지하기 위해 TypeError를 발생시킵니다.

BigInt 타입은 숫자 타입과는 다르게 큰 정수(안전한 숫자 타입의 범위를 벗어나는 정수)의 연산을 위해 나온 타입이기 때문에 숫자와는 타입이 구분되어야 합니다.

  • parseInt() 함수

숫자로 변환하는 또 다른 방법으로는 parseInt() 함수를 이욯하는 방법이 있습니다.

다만, parseInt() 함수는 문자열만 대상으로 변환합니다.

값이 문자열이 아닌 경우에는 해당 값을 문자열로 변환한 후 사용합니다.

문자열의 변환 과정은 ToString 추상 연산 과정을 따릅니다.

console.log(parseInt('10', 10)); // 10
console.log(parseInt('-1', 10)); // -1

parseInt() 함수의 두 번재 인자는 기수를 의미합니다.

예제 코드는 기수를 10으로 지정하였디 깨문에 10진수를 기준으로 문자열을 숫자로 변환합니다.

기수를 생략하면 첫 번째 인자를 기준으로 추정하여 변환하므로 의도하지 않은 결과가 나올 수 있습니다.

버그를 만들고 싶지 않다면 반드시 기수를 지정하여 사용하길 권장합니다.

 

parseInt() 함수는 Number() 함수와는 달리 인내심을 가지고 끝까지 변환을 수행합니다.

console.log(Number('10A', 10)); // NaN
console.log(parseInt('10A', 10)); // 10

Number() 함수의 경우는 숫자로 변경 불가능한 문자가 있으면 곧바로 NaN을 반환하지만, parseInt() 함수는 변경 불가능한 문자가 나타날 때까지 최대한 숫자로 변환하여 결과를 반환합니다.

 

▷불리언으로 변환

Boolean도 ECMAScript의 ToBoolean 추상 연산에 따라 타입을 변환합니다.

타입 불리언 변환 결과
undefined false
null false
string 빈 문자열 → false, 그 외 문자열 → true
number +0, -0, NaN → false, 그 외 숫자 → true
Symbol true
BigInt 0n → false, 그 외 BigInt 정수 → true
object true

[논리 연산자]에서 살펴본 falsy 값이 기억나시나요?

falsy 값의 기준은 위의 표에 정의된 규칙을 그대로 따른 것입니다.

불리언 타입으로의 변환은 Boolean() 함수를 호출하는 방법과 이중 부정 연산자를 사용하는 방법이 있으며, 두 연산은 모두 동일한 결과를 반환합니다.

const a = null;
const b = 0;
const c = '';
const d = {};
const e = [];

console.log(Boolean(a)); // false
console.log(Boolean(b)); // false
console.log(Boolean(c)); // false
console.log(Boolean(d)); // true
console.log(Boolean(d)); // true

console.log(!!a); // false
console.log(!!b); // false
console.log(!!c); // false
console.log(!!d); // true
console.log(!!d); // true

 

2) 객체의 원시 타입 변환

암시적 강제 변환을 살펴보기 전에 객체의 원시 타입 변환에 대해 먼저 알아보겠습니다.

객체의 원시 타입 변환은 문자열로 변환, 숫자로 변환 두 가지로 나눌 수 있습니다.

그리고 이 과정에서 valueOf() toString() 메서드가 중요한 역할을 합니다.

▷문자열로 변환

객체가 문자열로 변환되는 과정을 아래와 같은 단계로 진행됩니다.

1단계

객체에 정의된 toString() 메서드를 호출합니다. 별도로 정의한 toString() 메서드가 없다면 기본적으로 Object.prototype.toString() 메서드를 실행합니다. Object.prototype.toString() 메서드는 결과 값으로 '[Object object]' 문자열을 반환합니다.

2단계

1단게의 결과가 원시 타입이라면 그 결과를 문자열로 변환하여 반환하고, 그렇지 않다면 valueOf() 메서드를 호출합니다. valueOf() 메서드 역시 객체에 별도로 정의한 valueOf() 메서드가 없다면 기본적으로 Object.prototype.valueOf() 메서드를 실행합니다.

3단계

valueOf() 메서드의 결과 값이 원시 타입이라면 그 결과를 문자열로 변환하여 반환하고, 그렇지 않다면 TypeError가 발생합니다.

console.log(String({})); // '[Object object]'

빈 객체가 '[Object object]' 문자열로 변환되었습니다.

'[Object object]'가 어떻게 나온 결과 값인지 의아할 수 있을 것입니다.

하지만 이 결과는 위의 단계를 정확하게 따른 결과입니다.

1단계

빈 객체를 문자열로 변환하기 위해 객체의 toString() 메서드를 호출합니다. 직접 정의한 toString() 메서드가 없기 때문에 Object.prototype.toString() 메서드를 실행합니다.

2단계

1단계의 결과값은 '[Object object]' 문자열이며 원시 타입이기 때문에 이 결과를 반환합니다.

 

빈 객체의 toString() 메서드의 결과값이 '[Object object]' 문자열 원시 타입이기 때문에 이 결과를 반환하는 것입니다.

또한 toString() 메서드의 결과값이 원시 타입이기 때문에 valueOf() 메서드는 호출되지 않습니다.

 

▷숫자로 변환

객체가 숫자로 변환되는 과정 역시 단계별로 보겠습니다.

1단계

객체에 정의된 valueOf() 메서드를 호출합니다. 별도로 정의한 valueOf() 메서드가 없다면 기본적으로 Object.prototype.valueOf() 메서드를 실행합니다. Object.prototype.valueOf() 메서드는 결과 값으로 객체를 그대로 반환합니다.

2단계

1단계의 결과가 원시 타입이라면 그 결과를 숫자로 변환하여 반환하고, 그렇지 않다면 toString() 메서드를 호출합니다. 별도로 정의한 toString() 메서드가 없다면 기본적으로 Object.prototype.toString() 메서드를 실행합니다.

3단계

toString() 메서드의 결과 값이 원시 타입이라면 그 결과를 숫자로 변환하여 반환하고, 그렇지 않다면 TypeError가 발생합니다.

 

valueOf() 메서드를 먼저 호출한 후 toString() 메서드를 호출하는 것을 제외하면 객체를 문자열로 변환하는 과정과 유사합니다.

console.log(Number({})); // NaN

1단계

빈 객체를 숫자로 변환하기 위해 객체의 valueOf() 메서드를 호출합니다. 직접 정의한 valueOf() 메서드가 없기 때문에 Object.prototype.valueOf() 메서드를 실행합니다.

2단계

1단계의 결과값은 원시 타입이 아닌 빈 객체를 그대로 반환하기 때문에 toString() 메서드를 호출합니다.

3단계

toString() 메서드의 결과값은 '[Object object]' 문자열이며 원시 타입이기 때문에 이 결과를 숫자로 변환합니다. '[Object object]' 문자열은 숫자로 변환할 수없는 값이기 때문에 최종적으로 NaN을 반환합니다.

 

▷객체의 valueOf()와 toString()

만약 valueOf()와 toString() 메서드를 직접 정의한 경우는 어떤 결과 값을 반환할까요?

const obj = {
	valueOf() {
   		return 1;
    },
   	toString() {
    		return 'toString';
    }
}

console.log(String(obj)); // 'toString'
console.log(Number(obj)); // 1

객체의 valueOf()와 toString() 메서드를 직접 정의하면 타입 변환의 결과도 달라짐을 알 수 있습니다.

그렇기 때문에 valueOf()와 toString() 메서드를 재정의할 때는 주의해야 합니다.

 

배열, Date, 정규식과 같은 특수한 객체들은 자체적인 toString() 또는 valueOf() 메서드를 가지고 있습니다.

예를 들어 배열을 문자열로 변경하면 배열의 원소를 콤마(,)로 구분하여 문자열로 병합합니다.

 

3) 암시적 강제 변환

암시적 강제 변환은 연산 중에 내부적으로 타입을 변환하는 것입니다.

명시적 강제 변환과 달리 코드에서 명확하게 타입을 변환하는 것인지 알기 어렵습니다.

많은 개발자가 자바스크립트를 좋아하지 않는 이유 중 하나이며, 초보 개발자들이 가장 헷갈려 하는 부분이기도 합니다.

하지만 암시적 강제 변환 역시 ECMAScript 명세의 기준대로 정확하게 동작하고 있습니다.

이 글에서 자바스크립트의 타입 변환은 명확한 기준이 있다는 점이 전달되기 바랍니다.

 

암시적 강제 변환은 타입이 아닌 연산자를 기준으로 살펴보겠습니다.

▷덧셈 연산자

덧셈 연산자는 숫자 연산이나 문자열을 병합할 때 사용하는 것이라고 생각할 수 있습니다.

하지만 덧셈 연산자는 몇 가지 특징이 있습니다.

 피연산자 중 하나가 문자열 타입인 경우 나머지 타입도 문자열로 변환하여 병합합니다.

// 문자열과 숫자의 덧셈 연산은 숫자를 문자로 변환하여 병합합니다.
console.log(1 + ''); // '1'

[NOTE]

String()과 a + ''의 문자열 변환은 차이가 있습니다. 피연산자의 타입이 객체인 경우 String() 함순느 객체의 toString(), valueOf()의 순서로 메서드를 호출하여 결과를 변환하며, a+''는 valueOf(), toString()의 순서로 호출된 결과를 반환합니다.

 

 피연산자 중 하나가 객체이며 문자열로 변환 가능한 경우 문자열로 변환하여 연산합니다.객체의 문자열 변환 과정은 문자열로 변환에서 설명한 과정과 동일합니다.

// 빈 객체는 '[Object object]' 문자열로 변환이 가능하므로 숫자 1을 문자열로 변환하여 두 문자열을 병합합니다.
console.log(1 + {}); // '1[Object object]'

 

 피연산자가 모두 문자열과 객체가 아닌 경우 숫자로 변환하여 연산합니다. 만약 변환 결과의 타입이 각각 다른 경우 TypeError가 발생합니다.

// 피연산자 중 객체나 문자열이 없기 때문에 true를 숫자로 변환하여 연산합니다.
console.log(1 + true); // 2

보통 숫자 연산에 사용하던 덧셈 연산자에 생각보다 많은 타입 변환 규칙이 존재한다는 것을 알 수 있습니다.

처음 보면 이게 뭐지? 라고 생각할 수 있지만 위의 세 가지 규칙만 이해하면 어떻게 동작할지 알 수 있습니다.

ECMAScript 명세에는 더 세부적인 단계가 있지만, 위의 세 가지 규칙만 잘 이해해도 덧셈 연산자를 올바르게 사용하는데 큰 문제가 없을 것입니다.

 

▷동등 연산자

앞서 [관계형 연산자]에서 동등 연산자의 가장 큰 특징은 암시적 강제 변환을 허용하는 것이라고 하였습니다.

물론 피연산자의 타입이 서로 같은 경우에는 변환하지 않습니다.

 

동등 연산자가 어떤 규칙에 의해 동작하는지 살펴봅시다.

 피연산자 중 하나는 문자열, 하나는 숫자인 경우 문자열을 숫자로 변환하여 동등함을 비교합니다.

// 문자열 '1'을 숫자로 변환하여 동등함을 판단합니다.
console.log(1 == '1') // true

 

 피연산자 중 하나는 문자열, 다른 하나는 BigInt인 경우 문자열을 BigInt로 변환하여 동등함을 비교합니다.

// 문자열 '1'을 BigInt로 변환하여 동등함을 판단합니다.
console.log(1n == '1'); // true

 

 피연산자 중 하나는 null, 다른 하나는 undefined인 경우 동등하게 판단합니다.

console.log(null == undefined); // true
console.log(undefined == null); // true

 

 피연산자 중 하나가 불리언일 경우 불리언을 숫자로 변환하여 동등함을 비교합니다.

// 불리언 true를 숫자로 변환하여 비교합니다.
console.log(true == 1); // true

 

 피연산자 중 하나는 객체, 다른 하나가 문자열, 숫자, BigInt, 심볼 중 하나일 경우 객체를 원시 타입으로 변환하여 동등함을 비교합니다.

// 빈 객체를 원시 타입으로 변환한 후 비교합니다.
console.log('[Object object]' == {}); // true

 

 피연산자 중 하나는 숫자, 다른 하나는 BigInt인 경우 내부적인 숫자 비교 알고리즘에 따라 비교한 결과를 반환합니다.

console.log(1 == 1n); // true

 

동등 비교를 하는 과정에서 다양한 암시적 강제 변환이 일어나는 것을 알 수 있습니다.

규칙들을 하나하나 살펴보면 명확한 기준이 있고 이해하기 어렵지 않지만, 타입 변환으로 인해 가독성이 떨어지는 경우가 있습니다.

console.log(true == '1'); // true

true와 문자열 '1'은 전혀 다른 타입으로 동등 비교 시 false가 나올 것 같지만 그렇지 않습니다.

불리언 true는 숫자 1로 변환되어 문자열 '1'과 비교하게 되고, 이 과정에서 문자열 '1'은 숫자 1로 변환되어 최종적으로 숫자 1과 1을 비교하게 됩니다.

위에서 설명한 변환 규칙을 충실히 따른 결과이지만 확실히 가독성이 떨어집니다.

이런 경우에는 명확하게 엄격한 동등 연산자를 사용하는 것이 가독성에 훨씬 좋습니다.

그럼 헷갈리게 동등 연산자를 사용하지 말고 엄격한 동등 연산자만 사용하는게 좋은 것 아닌가요?

하지만 동등 연산자도 무조건 나쁜 것만은 아닙니다.

function isEmpty(a) {
	if (a == null) {
    		//...
    }
}

특정 값의 비어 있음을 판단하기 위해 동등 연산자를 사용하였습니다.

동등 연산자는 null과 undefined를 동등하게 보기 때문에 두 경우의 수를 모두 편리하게 찾아낼 수 있습니다.

 

동등 연산자는 코드 가독성을 위해 팀원들과 컨벤션을 정하여 사용하는 것이 좋습니다.

"우리 팀에서는 암시적 강제 변환을 허용하지 않겠다!"는 결정이 나면 안전하게 엄격한 동등 연산자만 사용하면 됩니다.

반면, 만약 팀 내에서 명확한 기준을 가지고 동등 연산자를 효율적으로 사용할 수 있다면 동등 연산자도 그 팀에서는 충분히 좋은 역할을 할 수 있습니다.

그리고 이러한 판단을 할 수 있으려면 적어도 앞서 설명한 규칙들은 알고 있어야 합니다.

 

▷비교 연산자

비교 연산자는 숫자 데이터의 대소 비교에서 사용하는 경우가 대부분일 것입니다.

하지만 비교 연산자 역시 동등 연산자처럼 피연산자가 서로 다른 타입인 경우 암시적 강제 변환이 발생합니다.

ECMAScript 명세는 a < b 연산 기준으로 설명하고 있기 때문에 이 글에서도 이 기준을 따라 알아보겠습니다.

비교 연산자는 크게 문자열 데이터의 비교, 그 이외의 경우 두 가지로 나누어져 있습니다.

다만, 피연산자가 객체인 경우 먼저 객체를 원시 타입으로 변환한 후 비교합니다.

변환된 결과가 모두 문자열이라면 문자열 비교를 하고 이외에는 문자열 외의 비교 규칙에 따라 비교합니다.

  • 문자열 비교

문자열 비교는 각 문자를 알파벳 순서로 비교합니다.

또한 왼쪽에서부터 문자 단위로 비교합니다. 즉 '1'과 '04' 로 보았을 때, 왼쪽 가장 처음 문자열 '1'과 '0'을 비교했을 때 이미 왼쪽이 더 큼을 알 수 있습니다.

console.log('a' < 'b'); // true

// 왼쪽에서부터 문자 단위로 비교한다는 것을 주의하세요. 왼쪽부터 '1'과 '0'을 먼저 비교하고 그 다음 문자를 비교합니다.
console.log('1' < '04') // false

피연산자가 배열인 경우를 알아봅시다.

console.log(['a'] < ['b']); // true

배열은 각각 'a', 'b' 문자열로 변환되기 때문에 문자열끼리의 비교를 수행합니다.

 

  • 문자열 외의 비교

문자열끼리의 비교가 아닌 그 외의 경우는 아래와 같은 규칙으로 동작합니다.

① 피연산자 중 하나는 문자열, 다른 하나는 BigInt인 경우 문자열을 BigInt로 변환하여 비교합니다.

// 문자열 '1'을 BigInt로 변환하여 비교합니다.
console.log('1' < 2n); // true

 

② 피연산자를 모두 숫자로 변환하여 비교합니다. 만약 피연산자 중 하나는 숫자, 다른 하나는 BigInt인 경우 내부적인 숫자 비교 알고리즘에 의해 비교를 수행합니다.

// 불리언 true를 숫자로 변환합니다.
console.log(1 < true); // false

// 숫자와 BigInt는 내부 숫자 비교 알고리즘에 의해 비교됩니다.
console.log(1n < 2); // true

 

  • 비교 연산과 타입 변환

비교 연산은 동등 연산과 달리 엄격한 비교 연산자 같은 표현식은 존재하지 않습니다.

 다른 타입 간의 비교 연산에서 암시적인 강제 연산을 막을 수 없습니다.

하지만 동등 연산과 달리 비교 연산은 서로 다른 타입에 대해 사용할 일이 드물고, 객체나 배열을 원시 타입과 비교하는 일도 거의 없습니다.

// 아래와 같은 비교 연산 코드는 실제로 거의 사용하지 않을 것입니다.
const a = '1';
const b = ['02'];

if (a < b) {
	// ...
}

만약 서로 다른 타입을 대상으로 비교 연산자를 사용한다면, 명시적 강제 변환을 통해 변환한 후 사용하는 것이 안전합니다.

const a = '1';
const b = ['02'];

if (Number(a) < Number(b)) {
	// ...
}

Number() 함수를 사용하여 모두 숫자로 변환한 후 비교합니다.

이처럼 다른 타입의 비교 연산 명시적 타입 변환을 통해 동일한 타입으로 변환한 후 실행하는 것이 안전합니다.

 

▷조건 표현식과 논리 연산자

조건 표현식에서 암시적 강제 변환은 아주 흔하게 사용됩니다.

모든 값은 불리언으로 변환되어 조건 표현식에서 평가됩니다.

빈 문자열, null, undefined 등 falsy한 값을 필터링하기 위해 많이 사용하며 명시적 강제 변환보다 더 많이 사용됩니다.

const a = 0;
const b = 'javascript';
const c = null;

if (a) {
	console.log('호출되지 않음');
}

while (b) {
	console.log('thuthy');
   	break;
}

console.log(c ? 'truthy' : 'falsy'); // 'falsy'

조건 표현식에서의 암시적 강제 변환은 Boolean() 함수나 이중 부정 연산자를 사용하여 명시적 강제 변환을 수행하는 것보다 훨씬 간결하게 조건식을 표현할 수 있습니다.

  • 논리 연산자(&&, ||)

자바스크립트의 논리 연산자는 단락 평가 방식을 따릅니다.

이는 다른 프로그래밍 언어에서도 쉽게 볼 수 있는 동작입니다.

하지만 자바스크립트의 논리 연산자는 특이한 점이 있습니다.

논리 연산자의 결과 값이 불리언 타입이 아닐 수 있다는 것입니다.

그럼 어떤 값이 결과 값이 되는 걸까요?

결과 값은 아래와 같은 규칙을 따라 반환됩니다.

 

&& 논리 연산자는 첫 번째 피연산자의 값이 true로 평가되는 경우 두 번째 피연산자의 값을 반환하고, false로 평가되면 첫 번째 피연산자의 값을 반환합니다.

|| 논리 연산자는 첫 번째 피연산자의 값이 true로 평가되는 경우 첫 번째 피연산자의 값을 반환하고, false로 평가되면 두 번째 피연산자의 값을 반환합니다.

const a = null;
const b = 'javascript';
const c = 1;

console.log(a && b); // null
console.log(b || c); // 'javascript'

&& 연산의 결과 값이 null인 이유부터 단계별로 알아보겠습니다.

 

1단계

&& 논리 연산자는 첫 번째 피연산자 a부터 평가합니다.

2단계

첫 번째 피연산자 a는 불리언 값이 아니므로 암시적 타입 변환을 통해 불리언 값으로 변환됩니다. null은 falsy 값이기 때문에 false로 변환됩니다.

3단계

a의 평가 결과가 false이기 때문에 단락 평가 방식에 따라 다음 피연산자인 b는 평가하지 않습니다.

4단계

최종적으로 피연산자 a의 값을 반환합니다.

 

&& 연산자의 첫 번째 피연산자가 false로 평가되어 첫 번째 피연산자의 값인 null을 반환합니다.

이 과정은 위에서 설명한 && 논리 연산자의 규칙과 동일함을 알 수 있습니다.

|| 연산의 결과 값이 나온 이유도 단계별로 알아보겠습니다.

 

1단계

|| 논리 연산자는 첫 번째 피연산자 b부터 평가합니다.

2단계

첫 번째 피연산자 b는 불리언 값이 아니므로 암시적 타입 변환을 통해 불리언 값으로 변환됩니다. 'javascript' 문자열은 truthy 값이기 때문에 true로 변환됩니다.

3단계

b의 평가 결과가 true이기 때문에 단락 평가 방식에 따라 다음 피연산자인 c는 평가하지 않습니다.

4단계

최종적으로 피연산자 b의 값을 반환합니다.

 

마찬가지로 위에서 설명한 || 논리 연산자의 규칙과 동일한 결과를 반환합니다.

 

  • 논리 연산자의 활용

앞서 설명한 논리 연산자의 특징은 디폴트 값을 설정하거나 조건에 따라 함수를 실행할 때 유용합니다.

function setDefault(a) {
	return a || 'default string';
}

setDefault() 함수는 a의 값이 falsy 값이 경우 'default string'이라는 문자열을 디폴트 값으로 설정합니다.

const a = 'javascript';

function doSomething() {
	// ...
}

a && doSomething();

위 예제 코드는 피연산자 a가 truthy 값인 경우에만 doSomething() 함수를 실행합니다.

만약 React를 사용해 보았다면 이런 코드가 익숙할 것입니다.

컴포넌트를 조건에 따라 렌더링할 때 자주 사용하는 표현식입니다.

 

falsy 값이 아닌 null, undefined처럼 값이 비어 있는 경우에만 디폴트 값을 설정하고 싶을 때도 있을 것입니다.

그런 경우에는 || 연산자가 아닌 ES2020에서 등장한 null 병합(nullish coalescing) 연산자를 사용할 수 있습니다.

const a = '';

// a가 null, undefined인 경우만 'default' 문자열이 b의 값으로 할당됩니다.
const b = a ?? 'default';

 

 

출처: http://doeunn.tistory.com/31

Posted by useways
,

1. slice(시작인덱스, 종료인덱스) : 시작인덱스부터 종료인덱스-1까지 반환

* slice의 시작 인덱스 값 > 종료 인덱스 값 이면 작동하지 않는 것에 주의하자!

 <script>
    let txt = "My name is Hyeppy";

    console.log(txt.slice(1, 3)); //name
    console.log(txt.slice(3, 1)); // 작동하지 않는다.
    console.log(txt.slice(2)); // name is Hyeppy
    console.log(txt.slice()); // My name is Hyeppy
 </script>

 


2. substring(시작인덱스, 종료인덱스) : 시작인덱스부터 종료인덱스-1까지 반환

* slice와 달리 substring은 시작 인덱스 값 > 종료 인덱스 값 이여도 작동한다!

<script>
    let txt = "My name is Hyeppy";

    console.log(txt.substring(0, 3)); // My 
    console.log(txt.substring(7, 3)); // name
    console.log(txt.substring(2)); // name is Hyeppy
</script>

 

3. substr(시작위치, 길이) : 시작인덱스부터 길이만큼 반환

* substr()은 명세에서 사라질 수 있기 때문에 slice, substring 사용을 권장한다고 한다!

<script>
    let txt = "My name is Hyeppy";

    console.log(txt.substr(3, 4)); // name
    console.log(txt.substr(txt.indexOf("n"), 4)); // name
</script>


4. replace(바꿀문자열, 바뀔문자열) : 문자열을 대체할 수 있다. 그러나 처음 나온 문자열 1개만 바꿀 수 있다.

 * 만약 모든 문자열을 대체하고 싶다면?

    1) /문자열/ => 정규표현식을 사용해 문자열을 슬래쉬로 감싸고, g(전역탐색,RegExp.prototype.global)을 사용한다.

       (정규 표현식 뒤의 "g"는 전체 문자열을 탐색해서 모든 일치를 반환하도록 지정하는 전역 탐색 플래그입니다.)

    2) repalceAll을 사용한다!

<script>
    let txt = "My name is Hyeppy Hyeppy";

    console.log(txt.replace("Hyeppy", "큐티")); // My name is 큐티 Hyeppy
    console.log(txt.replace(/"Hyeppy"/g, "큐티")); // My name is Hyeppy Hyeppy
    console.log(txt.replace(/Hyeppy/g, "큐티")); // My name is 큐티 큐티
    console.log(txt.replaceAll("Hyeppy", "큐티")); // My name is 큐티 큐티
</script>

5. includes(찾으려는 문자 or 문자열) : 문자 또는 문자열을 포함하고 있는지 확인할 수 있다.

* 찾는 문자열이 있다면 true, 없다면 false를 반환한다.

<script>
    let txt = "My name is Hyeppy Hyeppy";
     
    console.log(txt.includes("H")); // true
    console.log(txt.includes("Z")); // false
</script>

6. split(구분하려는 문자) : 문자열을 구분하려는 문자 기준으로 split 쪼개준다.

* split(" ") : 공백을 기준으로 문자열을 쪼개준다.

* split("-") : - 문자를 기준으로 문자열을 쪼개준다.

<script>
    let txt = "My name is Hyeppy Hyeppy";

    console.log(txt.split(" ")); // ['My', 'name', 'is', 'Hyeppy', 'Hyeppy']
    console.log("010-5044-2903".split("-")); // ['010', '5044', '2903']
</script>

7. trim() : 문자열 양 끝의 공백을 제거한다.

</script>        
    console.log("         abc"); //          abc
    console.log("         abc".trim()); // abc
    console.log("         a b c".trim()); // a b c
    console.log("         a b c              ".trim()); // a b c
</script>

 

출처 : https://always-hyeppy.tistory.com/27

Posted by useways
,

자바스크립트와 jQuery 각각의 사용 방법을 정리해본다.

test라는 id를 갖고 있는 객체가 있는지 찾아보자 !

<script type="text/javascript">
 
window.onload = function(){
 
    // javascript
    if(document.getElementById("test")){
        console.log("id=test 객체가 존재합니다.");
    }else{
        console.log("id=test 객체가 존재하지 않습니다.");
    }
 
 
    // jQuery
    if($("#test").length > 0){
        console.log("id=test 객체가 존재합니다.");
    }else{
        console.log("id=test 객체가 존재하지 않습니다.");
    }
}
 
</script>

 

jQuery는 객체가 존재하지 않으면 length를 0으로 리턴한다.

Posted by useways
,

 

메소드는 2차원배열에서 쓰는 명령어들 입니다.

indeOf, slice, splice, join 등등 자주 쓰는 명령어들은 반드시 숙지를 해 두시면 좋구요~

 

이제 하나하나 알아보도록 할께요.

 

 

 

 

join은 위에서 보시는 것처럼, 중간중간에 문장을 넣을 수 있도록 도와주는 명령어 입니다.

위의 예제를 보시면 아시겠지요???ㅎㅎㅎ

 

 

 

 

reverse는 역순으로 만들어 줍니다.

말 그대로 반전 이라는 의미이죠?

 

 

 

indexOf 는 배열의 배치가 몇번째에 있는지를 보여 주는 것입니다.

 

참고로! 아셔야 할 부분은, 써니는 분명 우리가 볼땐 4번째에 있는건데,

스크립트에서는 3번째라고 나오죠?

 

그 이유는, 프로그램에서는 0부터 시작을 하기 때문입니다.

 

 

 

 

그리고, push와 pop에 대한 명령어 인데요,

뒷 부분에 추가하고자 하는 내용들을 넣게 됩니다.

반대로 pop은 하나를 빼는 것이죠.

 

 

 

 

위의 push와 pop비슷한 기능인데요,

이건 앞부분에 들어가고 빼는 명령어라고 보시면 될 것 같습니다.

 

 

 

 

splice는, 보시면...햇갈릴 부분이 많은데요,

splice (index,n,a,b....)

위에 설명 있지요??? 처음 숫자가 배열 인덱스번호, 그리고 n 이 개수, 뒤에 a,b 는 추가리스트 입니다.

 

 

 

 

slice는 말 그대로 잘라내는 명령어 인데요,

slice(2,5)의 뜻은, 세번째부터 5번째 "앞" 까지 분리해 내라~ 라는 뜻으로 해석됩니다.

 

그렇기 때문에, 결과는 2,3,4 가 나오는 것이죠.

5 자신은 포함되지 않습니다.

 

 

 

 

concat은 slice의 반대 명령어 라고 보시면 되구요, 합치는 것입니다.

배열의 갯수가 맻개든 무조건 합칠 수 있습니다.

 

 

 

 

sort는 배열 안에 등록된 문자열들이 순차적이지 못하고, 뒤죽박죽일때, 순차적으로 정렬을 해줍니다.

윈도우에서 이름순정렬이나 날짜별정렬이 바로 이방법으로 쓰인다고 보심 되겠습니다.

 

곰돌이가 빙글빙글 ^^

출처: https://rgy0409.tistory.com/324 [친절한효자손 취미생활]

Posted by useways
,

출처 :

http://clubhouse.xtx.kr/kiss2me/start.php?id=TG2&page=42&divpage=1&sn=off&ss=on&sc=off&select_arrange=headnum&desc=asc&no=305 

▶ 브라우저 객체
Window, Document, Frame, History, Location, Form, Image, Link. Radio. Text, Checkbox, Select, TexTrea, Navigator 등

▶ 자바스크립트 내장 객체
Date, Math, String, Array 등


§객체 이름으로 이미지 객체에 접근하기
document.images(0) 식으로 하위 객체에 접근하는 방법에는 약간의 문제가 있습니다. 엄청 많은 이미지를 가진 문서에서는 document.images(30) 시으로 접근 해야 하므로 일일이 이미지의 번호를 알아내기란 무척 번거롭기 때문입니다. 그렇다면 번호대신 사용할 수 있는 방법은 무엇일까요? 바로 객체 고유의 이름(태그의 name 속성에 지정된 값)을 사용하시면 됩니다.

ex)
<HTML>
<HEAD>
</HEAD>
<BODY>
<IMG SRC="111.GIF" NAME="TAG1">
<IMG SRC="222.GIF" NAME="TAG2">
</BODY>
</HTML>

위와 같은 HTML 문서에서 첫 번째 이미지 객체에 접근하기 위한 방법으로 document.images(0)을 사용해도 되지만 document.tag1을 사용하는 것이 휠씬 효율적인 방법입니다.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━

●변수
변수란 데이터를 저장하는 장소로 무언가를 담아두는 그릇으로 비유할 수 있습니다.
자바스크립틍는 자동으로 데이터 유형을 판단하기 떄문에 변수 선언이 다른 언어보다 간단하며 일반적인 경우 특별히 변수임을 선언할 필요도 없습니다. 즉, 변수를 선언하지 않고 필요한 곳에서 사용하면 되는데 다만, 변수를 선언하고자 하는 경우에는 다음과 같이 var 키워드를 사용하면 됩니다.

ex) Var 변수 이름 또는 var 변수 이름1, 변수 이름2, ...

그리고 변수를 선언하면서 "="을 사용하여 값을 할당할 수도 있습니다.
ex) Var 변수 이름 = 값

"태그매니아"를 브라우저에 출력하는 스크립트로 만들려면 다음과 같이 변수를 사용해서 작성할수도 있습니다.

<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
var greet="태그매니아";
document.write(greet);
// -->
</SCRIPT>

물론 위의 예제에서 특별히 변수를 사용할 필요는 없습니다. 그렇지만 변수에는 고정된 값만 저장되는 것이 아니라서 프로그래밍에 따라 다양한 값이 저장될 수 있고, 긴 문자열을 변수에 담아 두고 여러 번 사용해야 할 경우 지정된 변수를 불러오는 것이 스크립트를 보다 간편하게 줄일 수 있습니다.

1] 세미콜론(;)생략하기
세미콜론(;)은 스크립트를 작성할 때 문장을 구분하기 위해 문장의 끝에 사용합니다. 한행에 한 문장만 입력할 경우에는 생략해도 되지만 한 행에 두개 이상의 문장이 오는 경우 ;을 생략하면 에러가 발생하게 됩니다. 하지만 여러 문장일 경우에도 행을 바꾸면 세미콜론을 생략해도 됩니다.

var greet="태그매니아" document.write(greet) (X)
var greet="태그매니아"
document.write(greet) (O)

2] 변수 이름 짓기
변수 이름을 짓는 데 사용되는 규칙은 함수, 인수, 객체, 속성, 메소드의 이름을 지정하는 데도 적용됩니다.
①변수 이름은 항상 알파벳 문자나 "_"로 시작해야 합니다. 숫자나 특수문자로 시작하는 이름은 사용할 수 없습니다.
②한글이름은 사용할 수 없습니다.
③대, 소문자를 구별합니다. 즉 greet, Greet, GREET는 전혀 다릅니다.
④스페이스나 콤마, 물음표, 인용부호는 사용할 수 없습니다.
⑤자바스크립트에 예약된 단어는 사용할수 없습니다.

Posted by useways
,

1) 자바스크립트의 필요성

초기의 웹문서들은 상당히 정적이었습니다. 일방적으로 자료를 보여주기만 할 뿐 방문자의 상호작용을 할 수 있는 루트가 마련되어 있지 않았기 때문에 정보를 효과적으로 제공받을 수 없었습니다.
이런 정적인 웹에 활기를 불어넣고자 시도된 기술 중의 하나가 바로 자바스크립트입니다.



2) 자바스크립트와 자바 이해하기

자바스크립트에 '자바'란 단어가 사용된 관계로 자바스크립트와 자바를 동일시하는 분들이 많은데 자바스크립트는 자바와는 전혀 별개의 언어라고 할 수 있습니다.
자바는 선마이크로시스템즈에서 개발한 컴퍼일이 되는 C나 C++ 과 차원을 같이 하는 완전한 프로그래밍 언어이지만 자바스크립트는 HTML 문서에 소스가 삽입된 형태로 실행되는 웹 브라우저 내에서만 돌아가는 스크립트 언어에 불과합니다.
자바로 작성된 프로그램은 하나의 독립적인 프로그램으로 브라우저와 상관없이 실행되기도 하고 웹에서는 자바 애플릿이라는 이름으로 OBJET나 APPLET 태그를 사용하여 HTML 문서 내에 삽입되기도 합니다.



3) 자바스크립트 HTML문서에 삽입하기

자바스크립트는 일반적으로 HTML 문서 내에 소스 코드를 삽입시켜서 사용합니다. 이때 <SCRIPT> </SCRIPT> 태그를 사용하는데, 주로 <HEAD> </HEAD> 사이에 삽입하지만 HEAD나 BODY 어느 곳에도 위치할 수 있습니다.



★TIP) 자바스크립트는 커피향이 나는 로고로 유명한 선마이크로시스템즈 (SUN Micro Systems)와 넷스케이프에서 공동으로 개발한 언어이빈다. 초기의 자바스크립트는 Live Script라는 이름으로 불렸지만 자바 붐에 편승해 자바스크립트라는 이름을 가지게 되었답니다.

Posted by useways
,

1) 객체(Objet)
우리가 일상 생활에서 접하는 유형 무형의 모든 것이 객체라고 할 수 있습니다. 사람, 컴퓨터, 시계와 같이 눈에 보이는 것 뿐 만 아니라 마음과 같이 보이지 않는 것도 객체의 자격이 있습니다. 자바스크립트에서 객체는 일반적으로 웹브라우저와 관계되어 사용됩니다. 즉 브라우저 윈도우, 웹문서, 문서에 포함된 이미지, 폼 등과 같은 요소들이 하나의 객체가 됩니다. 이외에도 시간, 배열 등과 같이 자바스크립트 자체에 내장된 객체도 있으며 사용자가 정의한 객체도 사용할 수 있습니다.

2) 속성(Property)
자바스크립트에서 각각의 객체들은 속성을 가집니다. 사람이라는 객체의 속성인 얼굴은 눈, 귀, 코와 같은 속성을 가진 또 다른 하나의 객체가 될 수 있습니다.. 즉 하위 객체는 상위 객체의 속성이 됩니다. 자바스크립트에서도 이미지는 분명 하나의 객체이지만 document 객체의 속성이 되기도 합니다. 웹 문서는 자바스크립트에서 객체이고 배경색, 문서의 제목 등과 같은 속성을, 이미지는 너비, 높이 등의 속성을 가집니다. 객체의 속성을 바꾸기 위해서는 도트(.)를 사용하여 다름과 같이 구분해 적어주면 됩니다.

ex) 객체,속성 = "속성값"

예를 들어 웹문서의 배경색을 검은색으로 바꿀려면 어떻게 해야 할까요? 웹문서는 'document'이라는 객체이고 배경색은 bgcolor라는 속성명으로 표현되므로 다음과 같이 압력하면됩니다.

ex) documnet.bgcolor="black"

3) 메소드(Method)
속성이 객체에 속한 성질이라면 메소드는 객체의 동작을 좌우하는 것입니다. 사람을 웃게 한다든지 컴퓨터를 켜게 하는 것과 같이 어던 행동과 동작을 유발하는 것이 바로 메소드의 역활입니다.

자바스크립트에서는 'open( ) 메소드'를 이용하여 새로운 창을 열수도 있고(), 'write()메소드'를 이용하여 웹문서에 문자열을 출력한느 등 갖가지 흥미로운 효과를 가져 올 수 있습니다.

ex) 객체, 메소드(값)

Posted by useways
,

원문: https://inhaeng.tistory.com/10

객체(Object)

 

객체란, 현실의 사물을 프로그래밍에 반영한 거다. 코드로 보는 게 이해하기 쉽겠지? 

나를 프로그리맹에 반영해서 간단한 코드로 만들어보자!

 

바로 이게 나를 자바스크립트로 구현한 것이다. 위와 같이 heo라는 변수에 { }로 감싼 덩어리를 넣었다.

바로 이 덩어리가 나를 표현하는 객체이다. 객체의 부분별 이름을 살펴보자!

 

속성(Property)

 

객체 안을 보면 firstName과 lastName이 왼쪽에 있고, 'inhaeng'과 'Heo'가 오른쪽에 있다.

콤마로 구분되는 것들을 객체의 속성이라고 부른다. heo 객체에는 firstName: 'inhaeng'과 lastName:'Heo'까지 두 개의 속성이 있다.

속성끼리는 쉼표로 구분해준다. 위에서는 보기 좋게 줄 바꿈을 했지만, 꼭 줄바꿈을 해야 하는 것은 아니다. 

var heo = { firstName: 'inhaeng', lastName:'Heo'}; 처럼 쉼표로 구분되기만 하면 충분하다.

 

나를 heo라는 객체로 표현했다고 했는데 너무 간단한게 마음에 들지 않는다면 age, height, weight 등 여러가지 속성을 더 추가할 수 있다. 자신을 직접 객체로 표현해보자!

 

키(key)와 값(value)

 

속성에서 firstName과 lastName같은 것들을 객체의 키라고 부르고 'inhaneg'과 'Heo'를 값이라고 부른다.

(괄호 안의 영어는 외워두는게 좋다.) 즉, 속성은 키:값의 관계로 이루어져있다. 키는 속 성명이라고 생각하면 된다.

 

참고로 키는 문자열만 가능하다. 또 한가지, 속성명은 따옴표가 없어도 된다. 있어도 상관은 없다. 위를 보면 firstName과 lastName은 문자열인데도 따옴표로 안 감싸줬다. 반드시 따옴표로 감싸줘야 하는 경우도 있다. 바로 키에 띄어쓰기가 들어간 경우이다.

 

var wrap = { 'ex ample': 'wrap' };

위와 같은 경우, wrap 객체의 속성명은 'ex ample'이다. 이렇게 속성명 안에 띄어쓰기가 들어있을 경우는 따옴표로 감싸준다.

 

속성 값은 어떤 값이든지 상관없다. 문자열이어도 되고, 숫자여도 되고, 객체여도 된다. 아직 안 배웠지만, 객체나 함수여도 상관없다.

미리 말하자면 속성 값이 함수인 것을 우리는 메서드라고 특별히 따로 부른다.

 

그렇다면 heo 객체 안에 firstName이나 lastName 속성의 값을 사용하고 싶을 땐 어떻게 할까?

아까 키가 속성의 이름이라고 했다. 객체한테도 속성의 이름을 부르면 된다!

 

이렇게 접근할 수 있다. 마침표를 사용해서 heo 객체 안의 속성들에 접근하는 거다. 

아니면 [] 안에 속성명을 적어서 접근할 수도 있다. 하지만 [] 안에 적는 것보다는 주로 마침표를 사용한다. 어쩔 수 없이 [] 안에 적어야 하는 경우는 위에서처럼 속성명에 띄어쓰기가 들어가 있는 경우이다. 아까 wrap 객체 안의 'ex ample' 속성에 접근하고 싶을 때는 wrap['ex ample'] 이렇게 접근해야 한다. 그냥 wrap[ex ample]하면 오류가 난다.

 

객체를 다양하게 활용하는 방법을 살펴보자

 

위와 같이 객체 안의 속성을 바꿀 수도 있다.

 

아까도 말했듯이 객체 안에 속성값으로 객체가 들어갈 수도 있다. heo 객체의 속성으로 body가 있는데 그 값이 다시 객체인 거다. 객체의 속성에 접근하는 것이니까 마침표를 사용해서 점점 더 안으로 들어가면 된다. 객체를 사용해서 복잡한 데이터 구조를 짤 수 있겠지?

 

객체의 속성을 삭제하는 방법도 있다. 앞에 delete 키워드를 붙이면 된다. 위의 예제와 이어진다.

 

 

객체 중에는 특수한 객체가 있다. 바로 함수(Function)와 배열(Array)이다.

 

배열(Array)

배열은 []로 감싸서 나타내고, 객체 리터럴처럼 안에는 무엇이든지 다 들어갈 수 있다. 배열 안에 배열이 들어가도 되고, 배열 안에 객체가 들어가도 된다. 아직 안 배웠지만 함수도 들어갈 수 있다. 배열 안에 들어간 것들을 우리는 요소(item)라고 부른다. 객체의 속성처럼 쉼표로 구분하면 된다. 

 

자바스크립트는 배열의 길이를 미리 정할 필요가 없다. 안의 요소에 따라 자동으로 늘어나거나 줄어든다.

 

객체와의 차이점은 키가 없다는 거다. 그냥 값들만 순서대로 나열되어 있다. 아까 heo객체를 생각해보자. 거기서 키만 없으면

이런 모양이 되는거다. 굳이 키가 필요하지 않고 값만 많이 나열하고 싶을 때 배열을 사용한다.

 

배열 안의 요소를 선택하려면 뒤에 몇 번째 요소인지 숫자를 붙여준다. 자바스크립트에서는 0이 첫 번째다. 따라서 [0]을 붙이면 첫 번째 요소 inhaeng가 선택되고, [1]을 붙이면 두 번째 요소 heo가 선택된다.

 

heo[0]; // 'inhaneg'

heo[1]; // 'heo'

 

사실 배열도 키가 있다. 배열은 자동으로 키가 0,1,2,3,... 순서로 주어진다. 즉 'inhaeng' 값의 키는 0이고, 'heo'값의 키는 1이다. 위에서 요소를 선택한 원리가 바로 이거다. 키를 통해 배열의 요소를 선택한 것이다.

아까 객체는 []안에 속성 이름을 넣어서 값을 불러오는 방법도 있다. 그와 비슷하다.

어떻게 보면 

 

하지만 위와 같은 방법보다는 그냥 [] 안에 넣는 것을 자주 사용한다. 그리고 []를 사용하는 게 권장사항이기도 하다.

new를 사용하지않고 []만 사용해서 만든 배열을 배열 리터럴이라고 부른다. 객체 리터럴 같은 거다.

 

객체와 배열은 특성상 대부분의 프로그래밍 언어에 있다. 이들은 나중에 배울 자료구조와 알고리즘의 기본이기도 하다.

 

마지막 객체로는 함수가 있다. 함수는 객체나 배열보다 더 중요하기 때문에 다음에 설명한다.

'12 Javascript > 10 기초부분' 카테고리의 다른 글

---10 자바스크립트의 객체 및 변수 개념잡기  (0) 2021.07.29
00 자바스크립트란?  (0) 2021.07.29
11 switch case문  (1) 2021.07.16
10 Function(함수)  (0) 2021.07.15
10 제어문(if 문 , for 문)  (0) 2021.07.15
Posted by useways
,


출처 http://smartjuho.tistory.com/40



자바스크립트에서 parseInt를 사용 시 주의사항입니다.

특히 자바를 사용하셨던 분은 더 혼동이 될 수도 있습니다. 

자바에서는 Integer.parseInt(String s)를 사용하여 문자를 숫자로 형 변환시 10진수로 변환이 됩니다.

하지만 자바스크립트에서는 무조건 10진수로 변경되지는 않습니다.

자바스크립트에서 parseInt('08')를 하시고 결과 값을 확인하시면 결과는 0이 나옵니다.

이유는 입력되는 문자열이 0으로 시작되었기 때문에 8진수로 변환이 되는 것 입니다.

당연히 8이겠지 하고 결과값을 예측하시고 코딩을 하셨다면 큰 낭패일 수 있습니다.

간단한 예로 
document.write(parseInt("010")+ "<br />"); //8진수 변환
document.write(parseInt("0x10")+ "<br />"); //16진수 변환
해결 방법은 간단합니다.
1번째 인수 다음 2번째 인수에 변환될 진수를 적어 주시면 됩니다.
document.write(parseInt("10",10)+ "<br />"); //10진수 변환
document.write(parseInt("10",8)+ "<br />"); //8진수 변환
document.write(parseInt("10",16)+ "<br />");  //16진수 변환



또는 Number("08")를 사용하시면 10진수로 변환됩니다.

parseInt로 게시판 검색해 봤는데 해당 내용이 없어서 올림니다.


가볍게 넘길수 있는지만 결과에 큰 오류를 가져올 수 있는 오류입니다.

Posted by useways
,


// 문자열을 대문자로 변환
s = s.toUpperCase();
document.write(s + '<br />');
// 출력 결과: ABC ABCD ADOBE PHOTOSHOP



// 문자열을 소문자로 변환
document.write(s.toLowerCase() + '<br />');
// 출력 결과: abc abcd adobe photoshop


===내가 사용하는 방법

<input name="b00_002" type="text" class="css_InputBox" style="ime-mode:inactive; width: 90px" value=""  onkeyup='keyToUpperCase(this);'>

영문자 입력을 받고  ime-mode:inactive;
대문자로 변환 onkeyup='keyToUpperCase(this);'  onkeyup 이벤트일때만 정상작동한다.


.js부분에

function keyToUpperCase(obj){   //영문을때만가능하다 한글로 입력되면 깨진다....
obj.value = obj.value.toUpperCase();
}

Posted by useways
,


function replaceAll(str,orgStr,repStr)
{
    return str.split(orgStr).join(repStr);



[JavaScript] 는 replace 함수 사용 시 한번 만 치환된다.
ex)
var a = "2008-08-28";
var b = a.replace("-","");
alert(b);

결과 값 : 200808-28

아래와 같이 split 함수와 join 함수를 쓰면 이러한 문제가 해결 된다.
ex)
var a = "2008-08-28";
var b = a.split("-").join("");
alert(b);

결과 값 : 20080828

Posted by useways
,

어디서 가져왔더라... 찾기 편하게....등록..

//===================================================================
// DateUtil
//===================================================================
// DateCmp(date1, date2)
// date_Format(ymd, formatmask)
// date_FormatYM(ym, formatmask)
// format_YYYYMM(object)
// format_YYYYMMDD(object)
// getCurrentTime()
// getDay()
// getDayInterval(time1,time2)
// getHour()
// getHourInterval(time1,time2)
// getMMDD( separator)
// getMonth()
// getMonthInterval(time1,time2)
// getRelativeTime(y,m,d,h)
// getYear()
// getYYYYMM( separator)
// getYYYYMMDD( separator)
// isDate(y,m,d)
// isDateYM(ym)
// isDateYMD(ymd)
// isDateYYYY(yyyy)
// isDateYYYYMM( yyyymm )
// isFormatDate(ymd, formatmask)
// isFormatDateYM(ym, formatmask)
// isFutureTime(time)
// isPastTime(time)
// isValidDay(yyyy, mm, dd)
// isValidHour(hh)
// isValidMin(mi)
// isValidMonth(mm)
// isValidTime(time)
// isValidTimeFormat(time)
// isYM(y,m)
// isYunNyun(y)
// shiftTime(time,y,m,d,h)
// toTimeObject(time)
// toTimeString(date)
// offMoneyFormat( obj ) 
// onMoneyFormat( obj )
// cala_day(year, month, day)
// cala_weekday( x_nMonth, x_nDay, x_nYear)
// day_display(x_nDayOfWeek)

/////////////////////////////////////////////////////
function isValidMonth(num) {
/////////////////////////////////////////////////////
//유효한(존재하는) 월(月)인지 체크
    if(num == "") return;
 try{
  //object.value = object.value.replace(/./gi,'');
  if(isNaN(num)) { 
   throw Exception;
  }
  var m = parseInt(num,10);
  if(! (m >= 1 && m <= 12)){
   throw Exception;
  }
  if(num.length == 1){
   num = "0"+num;
  }
 }catch(Exception){
  window.alert("월 입력 오류입니다.");
  num="";
  num.focus();
 }
}


/////////////////////////////////////////////////////
function isValidMonthCheck(num) {
/////////////////////////////////////////////////////
//입력된 문자열이 유효한 월(月)인지 체크, 여부리턴
    if(num == "" || num == null)
  return false;

 if(isNaN(num)) { 
  return false;
 }

 var m = parseInt(num,10);
 
 if(! (m >= 1 && m <= 12)) {
  return false;
 }

 return true;
}


/////////////////////////////////////////////////////
function isValidDay(yyyy, mm, dd) {
/////////////////////////////////////////////////////
//유효한(존재하는) 일(日)인지 체크
    var m = parseInt(mm,10) - 1;
    var d = parseInt(dd,10);

    var end = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    if ((yyyy % 4 == 0 && yyyy % 100 != 0) || yyyy % 400 == 0) {
        end[1] = 29;
    }

    return (d >= 1 && d <= end[m]);
}


/////////////////////////////////////////////////////
function getCurrentTime() {
/////////////////////////////////////////////////////
// 현재 시각을 Time 형식으로 리턴
    return toTimeString(new Date());
}

/////////////////////////////////////////////////////
function getYear() {
/////////////////////////////////////////////////////
// 현재 年을 YYYY형식으로 리턴
    return getCurrentTime().substr(0,4);
}

/////////////////////////////////////////////////////
function getMonth() {
/////////////////////////////////////////////////////
// 현재 月을 MM형식으로 리턴
    return getCurrentTime().substr(4,2);
}

/////////////////////////////////////////////////////
function getDay() {
/////////////////////////////////////////////////////
// 현재 日을 DD형식으로 리턴
    return getCurrentTime().substr(6,2);
}

/////////////////////////////////////////////////////
function getYYYYMM( separator) {
/////////////////////////////////////////////////////
// 현재 年月을 separator 로 구분하여 리턴
    return getYear() + separator + getMonth();
}


/////////////////////////////////////////////////////
function getMMDD( separator) {
/////////////////////////////////////////////////////
// 현재 月日을 separator 로 구분하여 리턴
    return getMonth() + separator + getDay();
}


/////////////////////////////////////////////////////
function getYYYYMMDD( separator) {
/////////////////////////////////////////////////////
// 현재 年月日을 separator 로 구분하여 리턴
    return getYear() + separator + getMonth() + separator + getDay();
}

/////////////////////////////////////////////////////
function getHour() {
/////////////////////////////////////////////////////
// 현재 時를 HH형식으로 리턴
    return getCurrentTime().substr(8,2);
}

/////////////////////////////////////////////////////
function format_YYYYMM(object) {
/////////////////////////////////////////////////////
/**
 * 연월(YYYYMM)의 유효성을 체크하고 표준 날짜 포맷 (YYYY/MM) 으로 변환하여 리턴
 * (주의 : 이 함수의 파라미터는 객체임 (input object))
 */
    var num, year, month;
    num=object.value;   
    while (num.search("/") != -1) { 
  num = num.replace("/","");
 }
 if (isNaN(num)) {        
     window.alert("숫자로만 작성하셔야 합니다.");
  object.focus();
  return "";
 }  
    if( num != 0 && (num.length >= 5 && num.length <= 6)) {
        year = num.substring(0,4);
        month = num.substring(4);
        if (isValidMonthYYYYMM(object, month)==false){
            alert("월을 다시 한번 확인하시고 입력해 주세요.");
          object.focus();
          return "";
        }
        if (num.length==6) {
         num = year+"/"+month;
        } else if (num.length==5) { 
         num = year+"/"+"0"+month;
        } 
    } else {
        num = "";
  window.alert("년월을 다시 한번 확인하시고 입력해 주세요.");
  object.focus();
        return "";
    } 
    return num;
}

/////////////////////////////////////////////////////
function isValidMonthYYYYMM(object, num) {
/////////////////////////////////////////////////////
//유효한(존재하는) 월(月)인지 체크 -- format_YYYYMM 에서만 사용
    if(num == "") return false;
 if(isNaN(num)) { 
  return false;
 }

 var m = parseInt(num,10);
 if(! (m >= 1 && m <= 12)){
  return false;
 } 
}

/////////////////////////////////////////////////////
function format_YYYYMMDD(object) {
/////////////////////////////////////////////////////
// 연월일(YYYYMMDD)의 유효성을 체크하고 표준 날짜 포맷 (YYYY/MM/DD) 으로 변환하여 리턴 (주의 : 이 함수의 파라미터는 객체임 (input object))

    var num, year, month, day;
    num=object.value;
    
    while (num.search("/") != -1){ 
      num = num.replace("/","");
 }
 
 if (isNaN(num)) {        
     window.alert("숫자로만 작성하셔야 합니다");
     object.focus();
     return "";
 }
    if( num != 0 && num.length == 8 ) {
        year = num.substring( 0, 4 );
        month = num.substring( 4, 6 );  
        day = num.substring(6);
        if(isValidDay(year,month,day)==false) {
         num = "";
         window.alert("유효하지 않는 일자입니다. 다시 한번 확인하시고 입력해 주세요.");
         object.focus();
         return "";
  }          
        num = year+"/"+month + "/" + day;
    } 
    else {
        num = "";
        window.alert("날짜 입력형식 오류입니다. 다시 한번 확인하시고 입력해 주세요.");
        object.focus();
        return "";
    } 
    return num;
}
/////////////////////////////////////////////////////
function format_YYYYMMDDHHMM(object) {
/////////////////////////////////////////////////////

    var num, year, month, day;
    num=object.value;
    
    while (num.search("/") != -1){ 
      num = num.replace("/","");
      num = num.replace(":","");
      num = num.replace(" ","");
 }
  
  if (isNaN(num)) {        
      window.alert("숫자로만 작성하셔야 합니다");
      object.focus();
      return "";
  }
   
    if( num != 0 && num.length == 12 ) {
        year = num.substring( 0, 4 );
        month = num.substring( 4, 6 );  
        day = num.substring(6,8);
  if(isValidDay(year,month,day)==false) {
         num = "";
         window.alert("유효하지 않는 일자입니다. 다시 한번 확인하시고 입력해 주세요.");
         object.focus();
         return "";
  }          
  hh = num.substring(8,10);
  if(isValidHour(hh)==false) {
         num = "";
         window.alert("유효하지 않는 시간입니다. 다시 한번 확인하시고 입력해 주세요.");
         object.focus();
         return "";
  }
  mm = num.substring(10,12);
  if(isValidMin(mm)==false) {
         num = "";
         window.alert("유효하지 않는 분입니다. 다시 한번 확인하시고 입력해 주세요.");
         object.focus();
         return "";
  }
  
        num = year+"/"+month + "/" + day+" "+hh+":"+mm;
    } 
    else {
        num = "";
        window.alert("날짜 입력형식 오류입니다. 다시 한번 확인하시고 입력해 주세요.");
        object.focus();
        return "";
    } 
    return num;
}


/////////////////////////////////////////////////////
function isDate(y,m,d)
/////////////////////////////////////////////////////
{
 var yy,mm,dd;

// if (!isNumber(y) || !isNumber(m) || !isNumber(d)) return false;
 yy = parseInt(y, 10);
 mm = parseInt(m, 10);
 dd = parseInt(d, 10);

 if (yy < 1900 || yy > 2200 ) return false;

 if (mm < 1 || mm > 12) return false;
 if (dd < 1) return false;
 if (mm == 1 || mm == 3 || mm == 5 || mm == 7 || mm == 8 || mm==10 || mm==12)
 {
  if (dd > 31) return false;
 }
 else if (mm==2)
 {
  if (isYunNyun(yy))
  {
   if (dd > 29) return false;
  }
  else {
   if (dd > 28) return false;
  }

 }
 else if (dd > 30) return false;
 return true;
}

/////////////////////////////////////////////////////
function isYM(y,m){
/////////////////////////////////////////////////////
// 날짜인지 체크 (년, 월)

 var yy,mm;
 if (!isNumber(y) || !isNumber(m)) return false;
 yy = parseInt(y, 10);
 mm = parseInt(m, 10);

 if (yy < 1900 ) return false;

 if (mm < 1 || mm > 12) return false;
 
 return true;
}

//=============================================================================
// Function  : setDateFormat(obj, index, obj2)
// Parameter : Obj     현재의 입력 객체      
//      index   객체의 인텍스 
//      obj2    타겟객체 
// Return    : NONE
// 기능      : 날짜format을 check  하고 두번째 객체의 값으로 할당한다.
//      obj[index]의 값을 yyyy/mm/dd 형식으로 변경하고 원래 입력값은 obj2[index]의 value로 할당한다.
//=============================================================================
function setDateFormat(obj, index, obj2) {
    val = delChar(obj.value, '/'); //comma filtering
    obj.value = val;
    
    a = isNumber(obj);
    var no = "";
    if (a == 1) {        
        if (obj2.length == "undefined" || obj2.length == null) {
            obj2.value = "";
        } else {
            obj2[index].value = "";
        }        
        return;
    }

    val = obj.value;
    len = val.length;
    
    if (len == 6) {
  no = format_YYYYMM(obj);  
 } else if (len == 8) {
  no = format_YYYYMMDD(obj);  
 }
        
 if (no == "") {
  obj.value = no;
 }
            
 if (obj2.length == "undefined" || obj2.length == null) {
  obj2.value = obj.value;
 } else {
  obj2[index].value = obj.value;
 }
 obj.value = no;
}


/////////////////////////////////////////////////////
function date_FormatYM(ym, formatmask){
/////////////////////////////////////////////////////
 // 날짜인지 체크 (년, 월)
 
  var fcount = formatmask.length;
  var len = trim(ym).length;
 var rv = "";
 ym = trim(ym);

 if (len == 6)
 {
  if (ym.substring(4, 5) == "/")
  {
   return  ym;
  }

  y = ym.substring(0, 4);
  m = ym.substring(4, 6);
 }
 else if (len == 7)
 {
  if (ym.substring(4, 5) != "/")
  {
   return  -1;
  }
  y = ym.substring(0, 4);
  m = ym.substring(5, 7);
 }
 else 
 {
  return ym; 
 }
 
 var ym_concat = y + m;
 var ret_ = -1;
 
 if((fcount == 7) && (formatmask == "????/??"))
 {
  if (isDateYM(ym_concat))
  {
   ret_ = y + "/" + m;
  }
  else
  {
   ret_ = -1;
  }
 }
 else
 {
  alert('Format["????/??"] 형식을 다시 한번 확인하시고 입력해 주세요.');
  ret_ = -1; 
 }
 
 return ret_;
}

/////////////////////////////////////////////////////
function isDateYM(ym){
/////////////////////////////////////////////////////
 var yy,mm;
 var y = "";
 var m = "";
 ym = trim(ym);
 y = ym.substring(0, 4);
 m = ym.substring(4, 6);

 if ( isYM(y, m) == true )
 {
  return true;
 }
 else
 {
  return false; 
 }
}

/////////////////////////////////////////////////////
function isYunNyun(y){
/////////////////////////////////////////////////////
// 운년인지 check.
 if ( (y % 4) == 0 )
 {
  if ((y % 100) != 0) return true;
  if ((y % 400) == 0) return true;
 }
 return false;
}

/////////////////////////////////////////////////////
function date_Format(ymd, formatmask){
/////////////////////////////////////////////////////
//  "20020204"의 날짜 문자열에 대한 formatting하기. 
  var fcount = formatmask.length;
  var len = trim(ymd).length;
 var rv = "";
 ymd = trim(ymd);

 if (len == 8)
 {
  if (ymd.substring(4, 5) == "/" )
  {
   return  ymd;
  }
  y = ymd.substring(0, 4);
  m = ymd.substring(4, 6);
  d = ymd.substring(6, 8);
 }
 else if (len == 9)
 {
  if (ymd.substring(4, 5) == "/")
  {
   if (ymd.substring(7, 8) == "/" )
   {
    return  ymd;
   }
   else  //yyyy/mmdd 형식
   {
    y = ymd.substring(0, 4);
    m = ymd.substring(5, 7);
    d = ymd.substring(7, 9);
   }
  }
  else
  {
   return  -1;
  }
 }
 else if (len == 10)
 {
  if (ymd.substring(4, 5) != "/" || ymd.substring(7, 8) != "/" )
  {
   return  -1;
  }
  y = ymd.substring(0, 4);
  m = ymd.substring(5, 7);
  d = ymd.substring(8, 10);
 }
 else 
 {
  return ymd; 
 }
 
 var ymd_concat = y + m + d;
 var ret_ = -1;
 
 if((fcount == 10) && (formatmask == "????/??/??"))
 {
  if (isDateYMD(ymd_concat))
  {
   ret_ = y + "/" + m + "/" + d;
  }
  else
  {
   ret_ = -1;
  }
 }
 else
 {
  alert('Format["????/??/??"] 형식을 다시 한번 확인하시고 입력해 주세요.');
  ret_ = -1; 
 }

 return ret_;
}

/////////////////////////////////////////////////////
function isDateYMD(ymd){
/////////////////////////////////////////////////////
// "20020204"의 날짜 문자열에 대한 formatting하기. 
 var yy,mm,dd;
 var y = "";
 var m = "";
 var d = "";

 y = ymd.substring(0, 4);
 m = ymd.substring(4, 6);
 d = ymd.substring(6, 8);

 if(isNaN(y) || isNaN(m) || isNaN(d)){
  return false; 
 }

 if ( isDate(y, m, d) == true )
 {
  return true;
 }
 else
 {
  return false; 
 }
}

/////////////////////////////////////////////////////
function isDateYYYY(yyyy){
/////////////////////////////////////////////////////
//년도 체크
 var yyyymmdd = yyyy + "0101";
 return isDateYMD(yyyymmdd);
}
/////////////////////////////////////////////////////
function isDateYYYYMM( yyyymm ){
/////////////////////////////////////////////////////
//년-월 체크

 var returnValue = false;
 var len = trim(yyyymm).length;
 yyyymm = trim(yyyymm);
 
 if( len == 7 )
 {
  if( yyyymm.substring(4, 5) == "/" )
  {
   returnValue = isYM( yyyymm.substring(0, 4), yyyymm.substring(5, 7) );
  }
 }
 else if( len == 6 )
 {
  returnValue = isYM( yyyymm.substring(0, 4), yyyymm.substring(4, 6) );
 }

 return returnValue;
}

/////////////////////////////////////////////////////
function isValidHour(hh) {
/////////////////////////////////////////////////////
// 유효한(존재하는) 시(時)인지 체크
    var h = parseInt(hh,10);
    return (h >= 1 && h <= 24);
}

/////////////////////////////////////////////////////
function isValidMin(mi) {
/////////////////////////////////////////////////////
// 유효한(존재하는) 분(分)인지 체크
    var m = parseInt(mi,10);
    return (m >= 1 && m <= 60);
}

/////////////////////////////////////////////////////
function isValidTimeFormat(time) {
/////////////////////////////////////////////////////
// Time 형식인지 체크(느슨한 체크)
    return (!isNaN(time) && time.length == 12);
}

/////////////////////////////////////////////////////
function isValidTime(time) {
/////////////////////////////////////////////////////
// 유효하는(존재하는) Time 인지 체크 년/월/일 만을(시간,분 제외) 검사. 
    var year  = time.substring(0,4);
    var month = time.substring(4,6);
    var day   = time.substring(6,8);
    //var hour  = time.substring(8,10);
    //var min   = time.substring(10,12);

    if (parseInt(year,10) >= 1900  && isValidMonth(month) &&isValidDay(year,month,day)){
     //&& isValidHour(hour)   && isValidMin(min)) {
        return true;
    }
    return false;
}

/////////////////////////////////////////////////////
function toTimeObject(time) { //parseTime(time)
/////////////////////////////////////////////////////
// Time 스트링을 자바스크립트 Date 객체로 변환  parameter time: Time 형식의 String
    var year  = time.substr(0,4);
    var month = time.substr(4,2) - 1; // 1월=0,12월=11
    var day   = time.substr(6,2);
    var hour  = time.substr(8,2);
    var min   = time.substr(10,2);

    return new Date(year,month,day,hour,min);
}

 

/////////////////////////////////////////////////////
function toTimeString(date) { //formatTime(date)
/////////////////////////////////////////////////////
// 자바스크립트 Date 객체를 Time 스트링으로 변환 
// parameter date: JavaScript Date Object
    var year  = date.getFullYear();
    var month = date.getMonth() + 1; // 1월=0,12월=11이므로 1 더함
    var day   = date.getDate();
    var hour  = date.getHours();
    var min   = date.getMinutes();

    if (("" + month).length == 1) { month = "0" + month; }
    if (("" + day).length   == 1) { day   = "0" + day;   }
    if (("" + hour).length  == 1) { hour  = "0" + hour;  }
    if (("" + min).length   == 1) { min   = "0" + min;   }

    return ("" + year + month + day + hour + min)
}

/////////////////////////////////////////////////////
function isFutureTime(time) {
/////////////////////////////////////////////////////
// Time이 현재시각 이후(미래)인지 체크
    return (toTimeObject(time) > new Date());
}

/////////////////////////////////////////////////////
function isPastTime(time) {
/////////////////////////////////////////////////////
// Time이 현재시각 이전(과거)인지 체크
    return (toTimeObject(time) < new Date());
}

/////////////////////////////////////////////////////
function shiftTime(time,y,m,d,h) { //moveTime(time,y,m,d,h)
/////////////////////////////////////////////////////
// 주어진 Time 과 y년 m월 d일 h시 차이나는 Time을 리턴
    var date = toTimeObject(time);
    date.setFullYear(date.getFullYear() + y); //y년을 더함
    date.setMonth(date.getMonth() + m);       //m월을 더함
    date.setDate(date.getDate() + d);         //d일을 더함
    date.setHours(date.getHours() + h);       //h시를 더함
    return toTimeString(date);
}

/////////////////////////////////////////////////////
function getMonthInterval(time1,time2) { //measureMonthInterval(time1,time2)
/////////////////////////////////////////////////////
// 두 Time이 몇 개월 차이나는지 구함
    var date1 = toTimeObject(time1);
    var date2 = toTimeObject(time2);

    var years  = date2.getFullYear() - date1.getFullYear();
    var months = date2.getMonth() - date1.getMonth();
    var days   = date2.getDate() - date1.getDate();

    return (years * 12 + months + (days >= 0 ? 0 : -1) );
}

/////////////////////////////////////////////////////
function getDayInterval(time1,time2) {
/////////////////////////////////////////////////////
// 두 Time이 며칠 차이나는지 구함
    var date1 = toTimeObject(time1);
    var date2 = toTimeObject(time2);
    var day   = 1000 * 3600 * 24; //24시간

    return parseInt((date2 - date1) / day, 10) + 1;
}

/////////////////////////////////////////////////////
function getHourInterval(time1,time2) {
/////////////////////////////////////////////////////
// 두 Time이 몇 시간 차이나는지 구함
    var date1 = toTimeObject(time1);
    var date2 = toTimeObject(time2);
    var hour  = 1000 * 3600; //1시간

    return parseInt((date2 - date1) / hour, 10);
}

/////////////////////////////////////////////////////
function getRelativeTime(y,m,d,h) {
/////////////////////////////////////////////////////
// 현재 시각과 y년 m월 d일 h시 차이나는 Time을 리턴
    return shiftTime(getCurrentTime(),y,m,d,h);
}

/////////////////////////////////////////////////////
function isFormatDate(ymd, formatmask){
/////////////////////////////////////////////////////
//9999/99/99 가 날짜인지
  var len_ymd = trim(ymd).length;
  var fcount = formatmask.length;

 if (len_ymd != 10)
 {
  return -1; 
 }
 
 if((fcount == 10) && (formatmask == "????/??/??"))
 {
  if (ymd.substring(4, 5) != "/" || ymd.substring(7, 8) != "/" )
  {
   return  -1;
  }
  y = ymd.substring(0, 4);
  m = ymd.substring(5, 7);
  d = ymd.substring(8, 10);

  var ymd_concat = y + m + d;
  var ret_value = -1;

  if (isDateYMD(ymd_concat))
  {
   ret_value = y + "/" + m + "/" + d;
  }
  else
  {
   ret_value = -1;
  }
 }
 else
 {
  alert('Format["????/??/??"] 형식을 다시 한번 확인하시고 입력해 주세요.');
  ret_value = -1; 
 }
 
 return ret_value;
}

/////////////////////////////////////////////////////
function isFormatDateYM(ym, formatmask) {
/////////////////////////////////////////////////////
//9999/99 가 날짜인지
  var len_ym = trim(ym).length;
  var fcount = formatmask.length;

 if (len_ym != 7)
 {
  return -1; 
 }
 
 if((fcount == 7) && (formatmask == "????/??"))
 {
  if (ym.substring(4, 5) != "/")
  {
   return  -1;
  }
  y = ym.substring(0, 4);
  m = ym.substring(5, 7);

  var ymd_concat = y + m + "01";
  var ret_value = -1;

  if (isDateYMD(ymd_concat))
  {
   ret_value = y + "/" + m;
  }
  else
  {
   ret_value = -1;
  }
 }
 else
 {
  alert('Format["????/??"] 형식을 다시 한번 확인하시고 입력해 주세요.');
  ret_value = -1; 
 }
 
 return ret_value;

}

 

/////////////////////////////////////////////////////
function DateCmp(date1, date2){
/////////////////////////////////////////////////////
//날자 크기 비교 입력형식 yyyy/mm/dd 또는 yyyymmdd
//ret = 0  if date1 == date2
//ret = 1  if date1 >  date2
//ret = -1 if date1 <  date2
 var s_date1 = date1 + ""; 
 var s_date2 = date2 + ""; 
 var ret = -2;
 
 if (s_date1 == s_date2)
 {
  ret = 0;
 }
 else if (s_date1 > s_date2)
 {
  ret = 1;
 }
 else if (s_date1 < s_date2)
 {
  ret = -1;
 }
 
 if (ret == -2)
 {
  alert("날자 비교가 잘못 되었습니다. 다시 한번 확인하시고 입력해 주세요.");
 }
 
 return ret;
}
// 해당 년월일의 요일 가져오기
function cala_day(year, month, day) {
 var nDayOfWeek = cala_weekday(month, day, year); 
 return day_display(nDayOfWeek)


// 해당 년월일에 따른 요일 계산하기
function cala_weekday( x_nMonth, x_nDay, x_nYear) {
  

        if(x_nMonth >= 3){         
                x_nMonth -= 2; 
        } 
        else { 
                x_nMonth += 10; 
        } 

        if( (x_nMonth == 11) || (x_nMonth == 12) ){ 
                x_nYear--; 
        } 

        var nCentNum = parseInt(x_nYear / 100); 
        var nDYearNum = x_nYear % 100; 

        var g = parseInt(2.6 * x_nMonth - .2); 

        g +=  parseInt(x_nDay + nDYearNum); 
        g += nDYearNum / 4;         
        g = parseInt(g); 
        g += parseInt(nCentNum / 4); 
        g -= parseInt(2 * nCentNum); 
        g %= 7; 
         
        if(x_nYear >= 1700 && x_nYear <= 1751) { 
                g -= 3; 
        } 
        else { 
   if(x_nYear <= 1699) { 
     g -= 4; 
   } 
        } 
         
        if(g < 0){ 
                g += 7; 
        } 
         
        return g; 


//요일 보여주기
function day_display(x_nDayOfWeek) { 

 if(x_nDayOfWeek == 0) return "일"; 
 if(x_nDayOfWeek == 1) return "월"; 
 if(x_nDayOfWeek == 2) return "화"; 
 if(x_nDayOfWeek == 3) return "수"; 
 if(x_nDayOfWeek == 4) return "목"; 
 if(x_nDayOfWeek == 5) return "금"; 
 if(x_nDayOfWeek == 6) return "토"; 




//년월일 포멧을 맞춰 준다.
//예 2000년 3월 2일 ====> 2000년 03월 02일
function convertDate(sfrYear, sfrMonth, sfrDay) {

 var sYear = sfrYear.value ;
 var sMonth = sfrMonth.value ;
 var sDay = sfrDay.value ;
 
 
 if ((sYear == null || sYear == "") && (sMonth == null || sMonth == "" )&& (sDay == null || sDay == "" ))
  return;


 if (isNaN(sYear))
  sYear = "";
 if (isNaN(sMonth))
  sMonth = "";
 if (isNaN(sDay))
  sDay = "";
 
 if (sYear == null || sYear == "" ) {
  sfrYear.value = "";
  return;
 }
 if (sMonth == null || sMonth == "" ) {
  sfrMonth.value = "";
  return;
 }
 if (sDay == null || sDay == "" ) {
  sfrDay.value = "";
  return;
 }
  

 var iYear=parseInt(sYear,10);
 var iMonth=parseInt(sMonth,10);
 var iDay=parseInt(sDay,10);

 if( iMonth<10 ) sMonth="0"+iMonth;
 else sMonth=""+iMonth;
 if( iDay<10)sDay="0"+iDay;
 else if( iDay<29)sDay=""+iDay;
 if(iYear<10 ){
  sYear="000"+iYear;
 } else if(iYear<100 ){
  sYear = "00"+iYear;
 } else if(iYear<1000 ){
  sYear = "0"+iYear;
 }else sYear = ""+iYear;
 
 sfrYear.value = sYear;
 sfrMonth.value = sMonth;
 sfrDay.value = sDay; 
}


//유효한 날짜 인지 체크 한다.
function checkDate(sfrYear, sfrMonth, sfrDay) {

 var sYear = sfrYear.value ;
 var sMonth = sfrMonth.value ;
 var sDay = sfrDay.value ;

 if (sYear == null || sYear == "" || sMonth == null || sMonth == "" || sDay == null || sDay == "" ){
  return "false";
 }

 var iYear=parseInt(sYear,10);
 var iMonth=parseInt(sMonth,10);
 var iDay=parseInt(sDay,10);

 if( iMonth<1 || iMonth>12 ){
   return "false";
 }
  
 if( iDay<1 || iDay > 31){
  return "false";
 }
 
 if( iMonth<10 ) sMonth="0"+iMonth;
 else sMonth=""+iMonth;
 if( iDay<10)sDay="0"+iDay;
 else if( iDay<29)sDay=""+iDay;
 else {
  if(iMonth==2){
   if  (( ( iYear%400 == 0 ) || ( ( iYear%100 != 0 ) && ( iYear%4 == 0 ) ) ) ) { if (iDay>29) { return "false";}}
   else if (iDay>28) return "false";
  }else if(iMonth==4 || iMonth==6 || iMonth==9 || iMonth==11){
   if(iDay>30 ) return "false";
  }else{
   if(iDay>31 ) return "false";
  }
 }
 if(iYear<10 ){
  sYear="000"+iYear;
 } else if(iYear<100 ){
  sYear = "00"+iYear;
 } else if(iYear<1000 ){
  sYear = "0"+iYear;
 }else sYear = ""+iYear;
 sfrYear.value = sYear;
 sfrMonth.value = sMonth;
 sfrDay.value = sDay;
 return "true";
  
}


// 쓰여진 공백을 제거하고, 생년월일의 입력이 올바른지 체크
// (2004.07.13 for KNTO by 고상원)
// 매개변수 : year,month,date (form의 input type=text 객체)
//
// 입력이 틀린부분이 있으면
// 1. 메시지를 출력하고
// 2. 해당부분에 focus()를 호출하고
// 3. false를 return한다.
// 입력이 모두 맞으면 true를 리턴한다.
// (자릿수가 1자리인 월,일에는 앞에 0을 붙인다.)
function isValidBirthdateInput(year, month, date) {

 // 공백제거
 year.value = year.value.replace(/ /gi,"");
 month.value = month.value.replace(/ /gi,"");
 date.value = date.value.replace(/ /gi,"");

 // 년
 if (year.value.length != 4 || isNaN(year.value)) {
  alert("해당 년을 다시 한번 확인하시고 입력해 주세요.");
  year.focus();
  return false;
 }

 // 월
 if (!isValidMonthCheck(month.value)) {
  alert("해당 월을 다시 한번 확인하시고 입력해 주세요.");
  month.focus();
  return false;
 }
 else if (month.value.length == 1)
  month.value = "0" + month.value;

 // 일
 if (!isValidDay(year.value, month.value, date.value)) {
  alert("해당 날짜를 다시 한번 확인하시고 입력해 주세요.");
  date.focus();
  return false;
 }
 else if (date.value.length == 1)
  date.value = "0" + date.value;

 return true;
}

// 선택한 포맷으로 날짜형식을 정한다.
function make_date_format(strDate, strformat){

 if(strDate != null) {
  if ( strDate.length == 8) {
   str = strDate.substring(0,4) + strformat + strDate.substring(4,6) + strformat + strDate.substring(6,8); //날짜
  }
 }

 return str ;
}

Posted by useways
,

두 날짜사이의 지난 시간을 계산합니다.

 

일,시간,분,초

 

==========================================================================================================

  var strFromDate = "201012011500"; //시작시간
  var strToDate   = "201012021501"; //종료시간
  
  var fromDate = new Date(strFromDate.substring(0,4),
        strFromDate.substring(4,6)-1,
        strFromDate.substring(6,8),
        strFromDate.substring(8,10),
        strFromDate.substring(10,12)
       );
       
  var toDate = new Date(strToDate.substring(0,4),
        strToDate.substring(4,6)-1,
        strToDate.substring(6,8),
        strToDate.substring(8,10),
        strToDate.substring(10,12)
       );
    
  daysAfter = (toDate.getTime() - fromDate.getTime()) / (1000*60*60*24);
  hourAfter = (toDate.getTime() - fromDate.getTime()) / (1000*60*60);
  minAfter = (toDate.getTime() - fromDate.getTime()) / (1000*60);
  secAfter = (toDate.getTime() - fromDate.getTime()) / (1000);
  
  daysAfter = Math.round(daysAfter);
  hourAfter = Math.round(hourAfter);
  minAfter = Math.round(minAfter);
  secAfter = Math.round(secAfter);
  
  document.write(daysAfter + "일 지났습니다."); // 지난 날짜 출력
  document.write("<br>" + hourAfter + "시간 지났습니다."); // 지난 시간 출력
  document.write("<br>" + minAfter + "분 지났습니다."); // 지난 분 출력
  document.write("<br>" + secAfter + "초 지났습니다."); // 지난 초 출력

==========================================================================================================

[출처] [DATE] 날짜간 지난 시간 계산 자바스크립트|작성자 싸커마

'12 Javascript > 30 각종 함수' 카테고리의 다른 글

30 replace 문제점  (0) 2021.07.16
31 날자관련 각종 utils  (0) 2021.07.16
31 날자관련 날자계산  (0) 2021.07.16
인코더(Encoder), Eval함수 ,숫자변환함수  (0) 2021.07.15
31 날자관련 var d = new Date();  (0) 2018.07.18
Posted by useways
,

오늘 날짜를 기준으로 1주일,2주일,1개월이전날짜를 찍는걸로 만들었지만 버튼에 함수로 전달하는 파라메터를 조절하면 얼마든지 임의로 변경할 수 있겠습니다..^^

<html>
<head>
<title> 날짜 </title>
<script language="javascript">
<!--
function time(){
 var now = new Date;
 document.all.oo.innerText = "오늘은 " + now.getYear() + "년 " + (now.getMonth()+1) + "월 " + now.getDate() + "일 " + now.getHours() + "시 " + now.getMinutes() + "분 " + now.getSeconds() + "초 입니다.";

setTimeout("time()", 1000);

}

 

function setDay(t){// 일차를 파라메터로 받는다
 var now = new Date;
 var today = now.getYear() + "/" + (now.getMonth()+1) + "/" + now.getDate();//현재날짜
 document.date.date2.value = today; 
 document.date.date1.value = getThatday(today,t); //현재날짜와 일차를 파라미터로 보내서 결과리턴한다.
}

function getThatday(today,t){ //날짜, 일차를 파라메터로 받는다.
 var pdate=new Array(); 
 var pday=today.split("/"); //날짜를 구분자로 나누어 배열로 변환한다.
 var ptoday=new Date(pday[0],pday[1]-1,pday[2]); //데이트객체 생성한다.
 var ptimestamp=ptoday.valueOf()+1000*60*60*24*t; //t일후의 타임스탬프를 얻는다. 음수라면 이전날짜를 얻는다.
 var thatday=new Date(ptimestamp); //t일후의 날짜객체 생성한다.
 
 pdate[pdate.length]=thatday.getYear(); //년
 pdate[pdate.length]=thatday.getMonth()+1; //월
 pdate[pdate.length]=thatday.getDate(); //일
 return pdate.join("/"); //배열을 / 구분자로 합쳐 스트링으로 변환후 반환
}

 

//-->
</script>
</head>

<body onload="time()" >
<span id=oo></span>

<FORM METHOD=POST name="date" ACTION="">
 <INPUT TYPE="button" onclick="setDay(-7)" value="1주일">
 <INPUT TYPE="button" onclick="setDay(-14)" value="2주일">
 <INPUT TYPE="button" onclick="setDay(-30)" value="1개월">
 <br>
 <INPUT TYPE="text" NAME="date1">~<INPUT TYPE="text" NAME="date2">

</FORM>
</body>
</html>

 

출처 : 

https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=basketyj&logNo=30129949743 

http://kimjongyeol.tistory.com/54

 

Posted by useways
,

 

===> 조건이 숫자일때 여러조건 같이 하는법
/* 기본의 case 구문*/

var data = 0;
switch (data)
{
case 5:
  document.write("<b>데이터는 5 입니다. </b>");
  break;
case 6:
  document.write("<b>데이터는 6 입니다. </b>");
  break;
case 0,1,2,3,4 :
  document.write("<b>데이터는 0~ 4 입니다. </b>");
  break;
default:
  document.write("<b>없는 데이터 입니다  </b>");
}


===> 조건이 문자일때 여러조건 같이 하는법

//weblogic 일때 jstl에서 xml 데이터 불러올때 있는 공백때문에 저장할때 미리 공백제거하는 부분
function form_trim(form9) {
//function SetValues(form9 , c) { 
    //alert("dddddddd"+form9.elements[1].name);
    //form9.elements[6].value = this.docXML.getElementsByTagName("rec_aftn1").item(0).firstChild.nodeValue;
    //form9.elements[7].value = this.docXML.getElementsByTagName("rec_aftn2").item(0).firstChild.nodeValue;
     len = form9.elements.length;
     //alert(len); 
    for (i = 0; i < len; i++) {
        //alert("ddddd"+form9.elements[i].type);
        switch (form9.elements[i].type) {
            case "radio":
            case "checkbox": 
                //alert(form9.elements[i].name);
                //if (this.docXML.getElementsByTagName(form9.elements[i].name).item(0).firstChild.nodeValue == "true") {
                // form.elements[i].checked == true 
                //} 
                break; 
            case "text" :
            case "select-one" :
            case "hidden" :
            case "textarea" :    
                //alert("ddddd"+form9.elements[i].name);  
                //alert("dddddddd"+form9.elements[i].name+"["+this.docXML.getElementsByTagName("fp_priority").item(0).firstChild.nodeValue+"]");
                //form9.elements[i].value = this.docXML.getElementsByTagName(form9.elements[i].name).item(0).firstChild.nodeValue;
                //var val10 =  c.find(form9.elements[i].name).text() ; 
             //val10 = val10.replace(/\n/g,"\r");
             form9.elements[i].value = trim_both_side(form9.elements[i].value);
                //form9.elements[i].value = val10;
                break;
        } 
    }  
  
  
}//end function. 

 

 

 

 

 


=====참고: http://dongsilove.tistory.com/99 

<script type="text/javascript">

// 숫자형으로 조건 지정
var i = 365;

switch (i) {
  case 66    : document.write('66 이라는 정수입니다.<br />');
               break;
  case 365   : document.write('365 라는 정수입니다.<br />');
               break;

case 1000  : document.write('1000 이라는 정수입니다.<br />');

               break;
default    : document.write('해당 숫자가 없습니다.<br />');
               break;
}
// 출력 결과: 365 라는 정수입니다.


// 문자형으로 조건 지정
var c = 'A';

switch (c) {
  case 'A'  : document.write('A 라는 문자입니다.<br />'); break;
  case '똠' : document.write('똠 이라는 문자입니다.<br />'); break;


// 문자형으로 조건 지정
var c = 'A';

switch (c) {
  case 'A'  : document.write('A 라는 문자입니다.<br />'); break;
  case '똠' : document.write('똠 이라는 문자입니다.<br />'); break;
  case '7'  : document.write('7 이라는 문자입니다.<br />'); break;
  default   : document.write('해당되는 문자가 없습니다.<br />'); break;
}
// 출력 결과: 'A' 라는 문자입니다.


// 문자열로 조건 지정
var camera = 'Nikon D40X';

switch (camera) {
  case 'Nikon D40'  : document.write('50만원대입니다.<br />'); break;
  case 'Nikon D40X' : document.write('80만원대의 디카입니다.<br />'); break;
  case 'Canon PowerShot' : document.write('40만원대의 컴팩트 카메라입니다.<br />'); break;
  default   : document.write('해당되는 카메라가 없습니다.<br />'); break;
}
// 출력 결과: 80만원대의 디카입니다.

</script>



'12 Javascript > 10 기초부분' 카테고리의 다른 글

00 자바스크립트란?  (0) 2021.07.29
---20 객체와 배열이란?  (0) 2021.07.29
10 Function(함수)  (0) 2021.07.15
10 제어문(if 문 , for 문)  (0) 2021.07.15
10 변수의 선언  (0) 2021.07.15
Posted by useways
,

객체를 선언한후 변수를 추가할수 있다. 변수뿐아니라 함수또한 가능함

Delete를 사용하여 삭제도 가능하다 .

 

<script type="text/javascript">

    var student = {};

    //변수 추가

    student.name='CNJ';

    student.major='Computer science';

    student.grade='A';

    

    //메서드 추가

    student.toString = function(){

        var output ='';

        for(var key in this){

            if(key!='toString'){

                output+=key+' : '+this[key]+'\n';

            }

        }

        return output;

    };

    console.log(student.toString());

    

    //변수삭제

    delete(student.grade);

    console.log(student.toString());

    

    </script>

 

 

 

 

 

student배열을 선언한후,

push를 이용하여 객체를 하나씩 넣어준다.

객체안에 메소드를 추가하여 사용한다.

 

    <script type="text/javascript">

    

    var student= [];

    student.push({이름: '윤일성',국어:97,수학 :55,영어:30});

    student.push({이름: '조남재',국어:100,수학 :98,영어:99});

    student.push({이름: '이재백',국어:33,수학 :44,영어:55});

    student.push({이름: '김성준',국어:57,수학 :75,영어:70});

    

    for(var i in student){

        student[i].getSum=function(){

            return this.국어+this.수학+this.영어;

        }

        

        student[i].getAverage= function(){

            return this.getSum()/4;

        }

    }

    var output ='이름 \t 총점\t평균\n';

    for(var i in student){

        with(student[i])

            output+=이름+' \t'+getSum()+' \t'+getAverage()+'\n';

    }

    console.log(output);

    </script>

 

 

 

 

생성자

 

<script type="text/javascript">

    function Student(name,korean,math,english){

        this.name=name;

        this.korean=korean;

        this.math=math;

        this.english = english;

        

        this.getSum= function() {

            return this.korean+this.math+this.english;

        }

        this.getAVG= function() {

            return this.getSum()/3;

        }

        this.toString= function() {

            return this.name+'\t'+this.getSum()+'\t'+this.getAVG();

        }

    }

    

    var student=[];

    student.push(new Student('kim',94,65,84));

    student.push(new Student('park',78,84,76));

    student.push(new Student('sung',92,43,93));

    

    var output='이름\t총점\t평균\n';

    for(var i in student){

        output+=student[i].toString()+'\n';

    }

    console.log(output);

</script>

 

출처

https://blog.naver.com/PostView.naver?blogId=skawo32167&logNo=220453504108&parentCategoryNo=&categoryNo=50&viewDate=&isShowPopularPosts=false&from=postList

Posted by useways
,

요약

 var product ={

        name : '조남재',

        type : '타입은 객체',

        eat : function(food){

                alert(this.name+ '이가'+ food+ '을먹는다.');

            }

}

    console.log(typeof(product));  //object 찍힘

    console.log(product['name']); 

    console.log(product.type);

    product.eat('고기');

=========================================================================

객체 생성 및 접근

<script type="text/javascript">

// 객체 생성

    var product ={

        name : '조남재',

        type : '타입은 객체',

        component:'나는야조남재',

        made : '코리아',

}

    console.log(typeof(product));

    

    console.log(product['name']);

    console.log(product['type']);

    

    console.log(product.component);

    console.log(product.made);

 

 

</script>

 

 

객체내에 함수도 넣을수 있다.

객체내의 함수를 메소드라한다.

 

    var person ={

            name: '조남재',

            eat : function(food){

                alert(this.name+ '이가'+ food+ '을먹는다.');

            }

    };

    

    person.eat('고기');

 

 

for문으로 객체정보 사용하기.

<script type="text/javascript">

    var product = {

        name: 'Microsoft Visual Studio 2012',

        price: '15,000,000',

        language: '한국어',

        supportOS: 'window 32/64',

        subscription :true

    };

    

    var output='';

    for(var key in product){

        output +=key + " : " + product[key]+'\n';

    }

    alert(output);

    

</script>

 

 

 

객체 in 변수

 

 

<script type="text/javascript">

    var output ='';

    var student={

            name:'남재',

            math:100, english: 90,science: 85, history: 80

    };

    //잇는거

    output+= '"name" in student:'+('name' in student)+'\n';

    //없는거

    output+= '"gender" in student:'+('gender' in student)+'\n';

    

    alert(output);

 

</script>

 

In 을 사용하여 객체내에 변수가 있는지 없는지 확인할수있음.

 

With

With를 사용하여 객체내 속성, 변수를 간편하게 사용가능

단 없는 것을 사용하면 error (in 같이 검출기능은 X)

 

<script type="text/javascript">

    var output ='';

    var student={

            name:'남재',

            math:100, english: 90,science: 85, history: 80

    };

    

    with(student){

        output+='name : ' + name+'\n';

        output+='math : ' + math+'\n';

        output+='english : ' + english+'\n';

        output+='science : ' + science+'\n';

        output+='history : ' + history+'\n';

        output+='total : ' + (math+english+science+history)+'\n';

    }

    alert(output);

</script>

에러가나기 때문에 abc를 지우고 다시 실행!

 

 

출처

https://blog.naver.com/PostView.naver?blogId=skawo32167&logNo=220453503896&parentCategoryNo=&categoryNo=50&viewDate=&isShowPopularPosts=false&from=postList

 

Posted by useways
,

인코더와 디코더

 

script type="text/javascript">

var URI='http:\\hanb.co.kr?test=한글입니다.';

var output='';

output+= 'escape()\n';

output+=escape(URI)+'\n\n';

 

output+= 'escape()URi\n';

output+=encodeURI(URI)+'\n\n';

 

output+= 'escape()URIComponent()\n';

output+=encodeURIComponent(URI)+'\n\n';

 

alert(output);

console.log(output);

</script>

 

 

 

Eval 코드 실행함수

문자열이나 코드스트링을 실행문으로 바꿔주는함수

문자열을 실행시킨다. '1+1' 이나

var number=10;

alert(number);

 실행시킨다.

 

<script type="text/javascript">

 

console.log('1+1');

 

//문자열 => 표현식

console.log(eval('1+1'));

 

 

// 실행코드로 바꿔줌

var willEval ='';

willEval += 'var number=10;';

willEval+= 'alert(number);';

eval(willEval);

 

</script>

 

 

 

 

숫자변환함수

 

<script type="text/javascript">

 

var won = '1000';

var dollar ='1.5$';

alert(Number(won)+' : '+Number(dollar));

</script>

<script type="text/javascript">

 

var won = '1000';

var dollar ='1.5$';

alert(parseInt(won)+' : '+parseInt(dollar));

alert(parseFloat(won)+' : '+parseFloat(dollar));

</script>

 

숫자로 변환할수있는것만 바꿔준다.

그러나 parse도 여러 개 이상현상이 있으니 확인하고 바꿔서 사용해야한다.

 

출처

https://blog.naver.com/PostView.naver?blogId=skawo32167&logNo=220452876237&parentCategoryNo=&categoryNo=50&viewDate=&isShowPopularPosts=false&from=postList

Posted by useways
,

재사용성을위해 function 함수사용

 

<script type="text/javascript">

function func1(){

    console.log('func1() 호출')

}

//

    func1();

    func1();

</script>

 

 

매개변수를이용한 함수 (Function)

 

function func2(data1, data2){

    console.log('func2(1)'+data1);

    console.log('func2(2)'+data2);

}

//

 

    func2(1,2);

 

 

Return 값, 매개변수값 잇는 함수(function)

 

function func3(data1, data2){

    var sum=data1+data2;

    return sum;

}

var sum=func3(10,20);

    console.log("결과 : "+ sum)

 

또다른 선언방식(익명함수)

  • 익명함수는 선언적 함수보다 늦게 생성됨
  • (같은이름으로 선언했을시 익명함수가 남아있음.)
  • 왜냐하면 선어적함수는 코드가 실행되기전 한번선언이되고 시작됨.

//함수들 변수와 동일하게 취급

    var func1 = function(){

        console.log('func1() 호출');

    };

func1();

    console.log(typeof(func1));

    

    var func2= func1;

    func2()

    

 

가변인자 function 함수

    function sumAll(){

        for(var i=0;i<arguments.length;i++){

            console.log(arguments[i]);

        }

    }

    sumAll(1);

    sumAll(1,2);

 

 

 

리턴값이 Function(함수)인 Function(함수)

 

function returnFunction(){

    return function(){

        console.log('Hello Function ..!');

    }

}

returnFunction()();

 

 

 

 

 

내장함수

 

타이머

setTimeout(function,시간 밀리세턴); - 일정시간후 함수 한번 실행

setinterval(함수, 시간) 일정시간마다 함수실행

clearTimeout(id) – 일정시간후 함수를 한번 실핸하는 것을 중지

clearintervla(id) – 일정시간마다 함수를 반복하는 것을 중단합니다.

 

 

<script type="text/javascript">

 

var intervalID = setInterval(function(){

    console.log('<p>'+new Date()+'</p>');

},1000);

</script>

 

 

출처

https://blog.naver.com/PostView.naver?blogId=skawo32167&logNo=220452876212&parentCategoryNo=&categoryNo=50&viewDate=&isShowPopularPosts=false&from=postList

'12 Javascript > 10 기초부분' 카테고리의 다른 글

---20 객체와 배열이란?  (0) 2021.07.29
11 switch case문  (1) 2021.07.16
10 제어문(if 문 , for 문)  (0) 2021.07.15
10 변수의 선언  (0) 2021.07.15
10 출력문(document.write // Console.log //alert)  (0) 2021.07.15
Posted by useways
,

if문은 자바의 문법과 동일하다.

 

 

<script type="text/javascript">

var hakjum=prompt("학점을 입력하세요", 75);

if(hakjum>80){

    alert(hakjum+"점은 A입니다.")

}else if(hakjum>70){

    alert(hakjum+"점은 B입니다.")

}else if(hakjum>60){

    alert(hakjum+"점은 C입니다.")

}else{

    alert(hakjum+"점은 D입니다.")

}

</script>

 

 

for문돌려서 구구만 table 생성하기

<script type="text/javascript">

    var start=1;

    var end=9;

    document.write("<table border solid 1px>");

    document.write("<tr><td> </td>");

    for(var i=1;i<10;i++){

        document.write("<td>X"+i+"</td>");

    }

    document.write("</tr>");

    for(var i=start; i<=end;i++){

        document.write("<tr>");

        document.write("<td>"+i+"</td>");

        for(var j=1;j<10;j++ ){

            var result=i*j;

            document.write("<td>"+i+"x"+j+"="+result+"</td>");

        }

        document.write("</tr>");

    }

    document.write("</table>");

</script>

 

출처

https://blog.naver.com/PostView.naver?blogId=skawo32167&logNo=220452876160&parentCategoryNo=&categoryNo=50&viewDate=&isShowPopularPosts=false&from=postList

'12 Javascript > 10 기초부분' 카테고리의 다른 글

11 switch case문  (1) 2021.07.16
10 Function(함수)  (0) 2021.07.15
10 변수의 선언  (0) 2021.07.15
10 출력문(document.write // Console.log //alert)  (0) 2021.07.15
10 Java Script 개요와 개발환경설정  (0) 2021.07.15
Posted by useways
,

변수의 선언

var를 이용해 선언한다

데이터형은 선언하지않아도 자동적으로 입력이된다.

데이터형 가변형인자이다 .

<script type="text/javascript">

    var radius=10;

    var pi= 3.14159265;

    alert(2*pi*radius);

</script>

 

변수의 데이터형 확인

typeof

 

<script type="text/javascript">

    console.log(typeof('String'));

    console.log(typeof(273));

    console.log(typeof(true));

    console.log(typeof(function(){}));

    console.log(typeof({}));

 

    var test

    console.log(typeof(test))

    

</script>

 

증감 연산자

<script type="text/javascript">

    var list='';

    list+='<ul>';

    list+='    <li>hello</li>';

    list+=' <li>java script....</li>';

    list+='</ul>';

    

    document.write(list);

 

변수의 재선언

javascript엔 변수의 재선언이 가능함..

그러므로 변수명을 잘 선언하도록해야함

 

<script type="text/javascript">

    var favoriteFood="김치찌게";

    var favoriteFood="딸기";

    var favoriteFood="사과";

    

    //출력합니다

    alert(favoriteFood);

</script>

 

 

 

변수를 var선언하지 않고도 선언되는경우도 있다 .

    alert(typeof(variable));

    variable="ss"

    alert(variable);

보통이라면 variable이 선언이 되지않아서 , 오류가 떠야하지만

java script에서는 변수가 선언이되어 실행이된다.

 

 

=== 3번은 자료형과 내용이 같은것

!== 자료형과 내용이 다른것

 

<script type="text/javascript">

console.log(''===false);

console.log(''===0);

console.log(0===false);

console.log('273'===273);

 

</script>

 

 

출처

https://blog.naver.com/PostView.naver?blogId=skawo32167&logNo=220452876137&parentCategoryNo=&categoryNo=50&viewDate=&isShowPopularPosts=false&from=postList

'12 Javascript > 10 기초부분' 카테고리의 다른 글

11 switch case문  (1) 2021.07.16
10 Function(함수)  (0) 2021.07.15
10 제어문(if 문 , for 문)  (0) 2021.07.15
10 출력문(document.write // Console.log //alert)  (0) 2021.07.15
10 Java Script 개요와 개발환경설정  (0) 2021.07.15
Posted by useways
,

출력문1

<script type="text/javascript">

    document.write("Hello javascript<br>");

    /*

        html 생성, 띄어쓰기 <br> 써야함.

        

        DOM(Document Object Model) - Tree =>DOM Tree

        

        브라우저 html 문서을 읽으면 메모리에 DOM Tree 생성

        자바스크립트 메모리 안에 Dom Tree 수정

        

        확인방법

        DOM 탐색기 (자바스크립트 -> html코드로 바꿈 (소스보기엔 바뀐코드가 나옴.))

        

    */

    document.write("<b>Hello javascript</b>");

</script>

HtmL문서의 출력문으로 결과가난다 .

 

 

 

 

 

또다른 출력문2.(개발자 출력문)

 

<script type="text/javascript">

    console.log("Hello javascript");

</script>

홈페이지가 아닌 F12 콘솔창에서 볼수있으며

중간중간의 정보를 확인하기위해 사용한다.

 

 

출력3 (에러출력)

<script type="text/javascript">

    alert("Hello");

</script>

 

출처

https://blog.naver.com/PostView.naver?blogId=skawo32167&logNo=220452876061&parentCategoryNo=&categoryNo=50&viewDate=&isShowPopularPosts=false&from=postList

'12 Javascript > 10 기초부분' 카테고리의 다른 글

11 switch case문  (1) 2021.07.16
10 Function(함수)  (0) 2021.07.15
10 제어문(if 문 , for 문)  (0) 2021.07.15
10 변수의 선언  (0) 2021.07.15
10 Java Script 개요와 개발환경설정  (0) 2021.07.15
Posted by useways
,

요약

=================================================================

html5 + css3 + javascript

 

1. 브라우저 웹사이트(웹페이지)

    =>chrome Web Store

    =>브라우저 인스톨할 수 있는 프로그램(app store)

    =>chrome OS ( web OS)

    =>Ms Store

2. 안드로이드 / 아이폰용 프로그램

    직접설치(하이브리드앱) / 브라우저(모바일웹)

=>

3. wearable 기기

    => Smart Tv

 

java Script 에는 여러종류가 있엇고

모두의 문제는 해석기의 속도였는데

google에서 v8 engine으로 새로운 해석기를 만듬

 

v8 engine

    브라우저 밖

        1.액션 스크립트

        2.Unity 스크립트

        3.node.js

 

Script 언어 -소스 = 실행파일

compile 언어 -> 소스 -> 실행파일 -> 실행

 

* 그러므로 Script는 소스코딩이 중요하다

소스 코딩

    메모장 / 에디트 플러스

    IDE(통합개발환경) - eclipse(이클립스)

            -> apatana ( java스크립스 전용 이클립스 ) but 너무느려서 안쓰임

            -> webstorm --> www.jetbrains.com

            -> visual studio

 

 

이클립스

help -> eclipse Market

 

jsdt 검색

설치후

 

dynamic web project 생성

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<script type="text/javascript">

    alert("Hello");

</script>

 

</body>

</html>

 

java Script를 사용하는 두번째방법

new- other java script sorce를 만든후

js언어를 사용해준다.

<script type="text/javascript" src="js01.js">

</script>

사용한다 .결과는같고

 

오류 검출은 f12를 누르고 새로고침으로 찾아낼수있다.

js는 오류가나도 실행되는경우가 대부분이라 오류를 찾기 위해 f12관리자 모드를이용해 확인해봐야한다.

 

 

출처

https://blog.naver.com/PostView.naver?blogId=skawo32167&logNo=220452876014&categoryNo=50&parentCategoryNo=0&viewDate=¤tPage=9&postListTopCurrentPage=1&from=postList&userTopListOpen=true&userTopListCount=5&userTopListManageOpen=false&userTopListCurrentPage=9 

'12 Javascript > 10 기초부분' 카테고리의 다른 글

11 switch case문  (1) 2021.07.16
10 Function(함수)  (0) 2021.07.15
10 제어문(if 문 , for 문)  (0) 2021.07.15
10 변수의 선언  (0) 2021.07.15
10 출력문(document.write // Console.log //alert)  (0) 2021.07.15
Posted by useways
,

요약

var arr1=[73,32,103,42,4];
var arr2=new Array(273,32,103,42,4);

arr1.push(2);

//앞쪽부터검색 없으면 -1리턴
var output1 = array.indexOf(4);

//출력
    array.forEach(function(element,index,arr){
        console.log(index+"/"+element);
    });

    for(var i in array){
        console.log(array[i]);
    }

 

==========================================================================

출처

https://blog.naver.com/PostList.naver?blogId=skawo32167&skinType=&skinId=&from=menu&userSelectMenu=true

<script type="text/javascript">

    var arr1=[73,32,103,42,4];

    var arr2=new Array(273,32,103,42,4);

    

    console.log(arr1[0]);

    console.log(arr2[0]);

    console.log(arr1.length);

    console.log(arr2.length);

    

    var arr=[0,1];

    arr.push(2);

    arr.push(3);

    arr.push(4);

    

    alert(arr);

      

    

</script>

 

 

 

 

 

 

배열에 검색기능을 사용할수있다.

 

<script type="text/javascript">

var array=[1,2,3,4,5,5,4,3,2,1];

//앞쪽부터검색 없으면 -1리턴

var output1 = array.indexOf(4);

var output2 = array.indexOf(8);

//뒤쪽부터 검새 없으면 -1리턴

var output3 = array.lastIndexOf(4);

var output4 = array.lastIndexOf(8);

 

var output ="";

output+=output1+" : "+output2+"\n";

output+=output3+" : "+output4;

console.log(output);

</script>

 

 

배열의 또다른 기능

<script type="text/javascript">

 

var array=["","","",""];

 

    array.forEach(function(element,index,arr){

        console.log(index+"/"+element);

    });

 

</script>

 

 

향상된 for문 배열

 

<script type="text/javascript">

var array=['포도','딸기','바나나','참외'];

 

for(var i in array){

    console.log(array[i]);

}

</script>

 

Posted by useways
,

var d = new Date(0;

var yyyymmdd = d.getFullYear() + (d.getMonth()+1).setDigit(2) +d.getDate().setDigit(2);

var hhmmss = d.getHours().setDigit(2) + d.getMinutes().setDigit(2) + d.getMilliseconds();



참고 사이트:

http://blog.naver.com/PostView.nhn?blogId=zeze3731&logNo=221313992348



Posted by useways
,

1. substring : 어디서부터 어디까지 잘라내겠다

(java의 substring과 같다)

2. substr : 어디서부터 몇번째까지 잘라내겠다

 


예제) "abcdefg" 라는 문자열이 있으면

substring(2, 4) 를 하면 "cd"의 결과가 나오고

substr(2, 4) 를 하면 "cdef"가 나온다.

 


substring의 뜻은 인덱스 2번째 문자에서 인덱스 4번째 문자까지를 가져오겠다는 뜻.

substr의 뜻은 인덱스 2번째 문자에서부터 뒤로 4개를 가져오겠다.

 

뒤에서 부터 4자리 가져오기

var _str = 'kimsungho';

var str = _str.substr(_str.length - 4, 4);

 

출처 http://useways.tistory.com/entry/

Posted by useways
,

페이지 로딩시 시작할 스크립트 선언에 대해 <body onload="">의 onload를 많이 사용해 보았을 것입니다.

<body onload="fillGridOnEvent();" bgcolor="#EDEDED">


그리고 모든 페이지에서 공통으로 들어갈 스크립트는 페이지 마다 작성을 하지 않고, js 파일을 만들어 연결을 하여 사용을 할 것입니다.

여기서 그럼 모든 페이지에서 load시 공통으로 실행될 스크립트는 어떻게 작업을 할까요??
window.onload를 사용 하면 됩니다.

window.onload = function(){ 시작시 실행될 내용 }이런식으로 말이죠.

그런데 문제는 window.onload와 <body onload="">는 동시에 사용을 할 수 없습니다.
<body onload="">가 실행이 되면 window.onload는 실행이 되지 않는 문제가 있습니다.

그래서 이를 해결하고자 할때 사용하는 것이 window::onload()입니다.

function window::onload(){ 시작시 실행될 내용 }
이렇게 사용을 하면 됩니다.

실행 순서는 <body onload="">가 먼저 실행되고, 이어서 window::onload()가 실행됩니다.

 

[simon]

방법 1.

function window::onload(){
 alert(opener.document.title);
 if(opener.document.title ="상세화면"){
  self.ifrMain.location = "airport_recsnowtam_into.jsp";
 }else{
  self.ifrMain.location = "airport_recsnowtam_into.jsp"; 
 }
}

방법 2.

window.onload = function cnj_alrtBox(){
 alert(opener.document.title);

 if(opener.document.title ="상세화면"){
  self.ifrMain.location = "airport_recsnowtam_into.jsp";
 }else{
  self.ifrMain.location = "airport_recsnowtam_into.jsp"; 
 }
}

방법 3.  이방법은 ifrMain 찾을수 없다고 하면서 에러난다.

window.onload=cnj_alrtBox();

function cnj_alrtBox(){
 alert(opener.document.title);

 if(opener.document.title ="상세화면"){
  self.ifrMain.location = "airport_recsnowtam_into.jsp";
 }else{
  self.ifrMain.location = "airport_recsnowtam_into.jsp"; 
 }
}

Posted by useways
,