《 자 바스 크 립 트 고급 프로 그래 밍 제3 장 기본 개념 》 노트.

15875 단어 전단자바 script
3.1 문법
js 의 모든 변수, 함수 명, 연산 자 는 대소 문 자 를 구분 합 니 다.
3.1.2 식별 자
첫 번 째 문 자 는 알파벳 이나 밑줄 또는 $여야 합 니 다. 다른 문 자 는 앞의 세 개 를 제외 하고 숫자 도 있어 야 합 니 다.
3.1.3 주석 스타일
두 가지:
//    
/*
*     
*/

3.1.4 엄격 한 모델
ES5 는 엄격 한 모델 을 도입 하여 임 의 위치 에 다음 과 같은 코드 를 적 었 다. 즉, 엄격 한 모델 을 열 고 엄격 한 모델 에서 일부 코드 가 실 행 될 때 이상 을 던 질 수 있다.
"use strict";

3.1.5 문
js 코드 끝 에 추가 하지 않 아 도 됩 니 다.번 호 는 추가 하 는 것 을 권장 합 니 다. 오류 가 발생 하기 쉽 지 않 고 코드 를 압축 할 때 도 편리 합 니 다.
3.3 변수
var message = 'hi';//    , var  ,      
message = 2;//       
message2 = 'hi2';//     var,       ,          

function test() {
    var message = 'hi';//    ,message  test      
    message2 = 'hi';//  var,         ,       
}
console.log(message); // undefined
console.log(message2); // hi 

var message = 'hi', found = true, age = 29;//        

3.4 데이터 형식
5 가지 간단 한 데이터 형식: Undefined, Null, Boolean, Number, String.
1 가지 복잡 한 데이터 형식: Object
3.4.1 typeof 연산 자
console.log(typeof 'hi'); // string
console.log(typeof message); // undefined,       
var obj = null;
console.log(typeof obj); // object
console.log(typeof 2); // number
console.log(typeof true); // boolean
console.log(typeof function(){}); // function

3.4.2 정의 되 지 않 은 유형
이 유형 은 값 이 하나 밖 에 없습니다. undefined:
var message;
console.log(message);// undefined,       
var message2 = undefined;
console.log(message2);// undefined,      undefined
"use strict";//                   
//             
console.log(age); // ReferenceError: age is not defined,
//        undefined
console.log(typeof age); // undefined

//      ,       
delete age;//SyntaxError: Delete of an unqualified identifier in strict mode.

3.4.3 Null 타 입
값 이 하나 밖 에 없습니다: null.
var car = null;
console.log(typeof car); // object

3.4.4 불 리 언 타 입
이 유형의 두 값: true 와 false.
var found = true, lost = false;
console.log(found, lost);// true false

다른 유형 은 Boolean 형식 으로 변환 할 수 있 으 며 Boolean () 함 수 를 사용 합 니 다.
var msg = 'Hello world';
console.log(Boolean(msg)); // true

Boolean () 변환 규칙
데이터 형식
true 값 으로 변환
false 값 으로 변환
Boolean
true
false
String
비어 있 지 않 은 문자
"" (빈 문자열)
Number
0 이 아 닌 숫자 값 (무한대 포함)
0 과 NaN
Object
어떠한 대상 도
null
Undefined
존재 하지 않 음
undefined
var msg = 'Hello world';
if (msg) { //          ,       ,   true 
    console.log('msg is true'); // msg is true
}

3.4.5 Number 유형
두 가지 값, 정수 와 부동 소수점.
1. 부동 소수점 수치
var floatNum1 = 1.1, floatNum2 = 0.1, floatNum3 = .1, floatNum4 = 3.125e7;
console.log(floatNum1, floatNum2, floatNum3, floatNum4); // 1.1 0.1 0.1 31250000
//     ,          ,            ,
//            
if (0.1 + 0.2 === 0.3) {
    console.log('0.1+0.2 = 0.3');
} else {
    console.log('0.1+0.2 !== 0.3');
}

2. 수치 범위
//           ,           
console.log(Number.MIN_VALUE, Number.MAX_VALUE);// 5e-324 1.7976931348623157e+308
//              ,        ,     ,
//           
console.log(Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY);//-Infinity Infinity
//  isFinite              
console.log(isFinite(Number.POSITIVE_INFINITY), isFinite(2)); // false true

3. NaN
Not a Number, 하나의 수치 가 아 닙 니 다.
//   0/0    NaN
console.log(0/0, 2/0, -2/0); //NaN Infinity -Infinity
//  NaN !== NaN
console.log(NaN === NaN); // false
// isNaN()            ,          Number()      
console.log(isNaN(NaN)); // true
console.log(isNaN(10)); // false
console.log(isNaN('10')); // false (       10)
console.log(isNaN('blue')); // false (       )
console.log(isNaN(true)); // false (true   1)

4. 수치 변환
비 수 치 를 변환 할 수 있 는 함수 가 3 개 있 습 니 다: Number (), parseInt (), parseFloat ().
Number () 변환 규칙
데이터 형식
변환 규칙
Boolean
true = 1, false = 0
숫자 값
원 숫자
null
0
undefined
NaN
String
1. 문자열 에 숫자 만 포함 되 어 있 으 면 앞의 양음 호 를 포함 하여 10 진수 로 변환 합 니 다. 그 중에서 선도 하 는 0 은 무시 합 니 다. 2. 문자열 이 효과 적 인 부동 소수점 형식 이 라면 해당 하 는 부동 소수점 값 으로 변환 합 니 다. 마찬가지 로 선도 0 을 무시 합 니 다. 3. 문자열 에 효과 적 인 16 진수 가 포함 되 어 있 으 면 해당 하 는 10 진법 으로 변환 합 니 다. 4. 문자열 이 비어 0, 5. 기타 로 변환 합 니 다.내용 의, NaN 으로 변환 하기;
Object
우선 대상 의 valueOf () 방법 을 호출 한 다음 위의 규칙 에 따라 변환 합 니 다. 만약 변환 결과 가 NaN 이면 대상 의 toString () 방법 을 호출 하여 앞의 규칙 을 다시 적용 합 니 다.방법, 그러면 이 방법 을 호출 하고 위의 규칙 에 따라 전환 합 니 다. value Of 방법 이 없 으 면 toString () 방법 으로 전환 합 니 다)
// Boolean   
console.log(Number(true), Number(false));// 1 0
//   
console.log(Number(1), Number(1.02)); // 1 1.02
//    
console.log(Number('1'), Number('+1'), Number('+011')); // 1 1 11
console.log(Number('+01.1')); // 1.1
console.log(Number('+00xf'), Number('0xf')); // NaN 15
console.log(Number(""), Number('011s'));// 0 NaN
//   
let a = {
    valueOf: function() {
        return '2';
    }
}, b = {
    valueOf: function() {
        return 'b';
    },
    toString: function() {
        console.log('should not print');
        return '2';
    }
}, c = {
    valueOf: function() {
        return 'c';
    }, 
    toString: function() {
        return 'c';
    }
}, d = {
    toString: function() {
        return '2';
    }
};
console.log(Number(a), Number(b), Number(c), Number(d));// 2 NaN NaN 2

parseInt () 변환 규칙
변환 형식
변환 규칙
문자열
빈 칸 이 아 닌 문 자 를 찾 을 때 까지 문자열 앞의 빈 칸 을 무시 합 니 다. 이 문자 가 숫자 나 양음 번호 가 아니라면 NaN 으로 돌아 갑 니 다. 숫자 라면 비 숫자 문 자 를 만 날 때 까지 계속 해석 합 니 다.
수치
정수 부분 을 취하 다
console.log(parseInt("   -0022"));// -22
console.log(parseInt('  a2')); // NaN
console.log(parseInt('1234blue')); // 1234
console.log(parseInt('')); // NaN
console.log(parseInt(22.5)); // 22
console.log(parseInt('070')); // 70
console.log(parseInt('0xf')); // 15

// parseInt     2   ,         
console.log(parseInt('0xaf', 16));//175
console.log(parseInt('af', 16));//175
console.log(parseInt('af'));//NaN,     2   
console.log(parseInt('10', 2));// 2
console.log(parseInt('10', 8));// 8
console.log(parseInt('10', 10)); // 10
console.log(parseInt('10', 16)); // 16

parseFloat 변환 규칙
유형
규칙.
문자열
첫 번 째 비 어 있 는 문자 부터 잘못된 부동 소수점 문 자 를 만 날 때 까지 소수점 도 유효 문자 입 니 다. 10 진법 만 식별 합 니 다. 예 를 들 어 16 진법 은 0 으로 분 석 됩 니 다.
수치
대응 하 는 값 으로 변환 하고 소수점 이 0 이면 정수 로 변환 합 니 다.
console.log(parseFloat('1234blue')); // 1234
console.log(parseFloat(' +002.4')); // 2.4
console.log(parseFloat('0xf')); // 0
console.log(parseFloat(22.5));//22.5
console.log(parseFloat('22.34.5')); // 22.34
console.log(parseFloat('3.125e7')); // 31250000
console.log(parseFloat(22.0)); // 22

3.4.6 문자열 유형
작은 따옴표 나 작은 따옴표 로 묶 인 16 비트 유 니 코드 문자 로 구 성 된 시퀀스 입 니 다. 문자열 은 불변성 이 있 으 며, 생 성 에 성공 하면 수정 할 수 없습니다.
var lang = 'Java';
lang = lang + 'Script';//    lang,             
console.log(lang);// JavaScript

문자열 을 변환 하 는 방법 은 두 가지 가 있 습 니 다:
1. 수치, 불 값, 대상 과 문자열 값 은 toString () 방법 을 호출 할 수 있 습 니 다.
var age = 2, found = true;
console.log(age.toString(), found.toString());// 2 true
// undefined, null    toString()  ,     
//      toString()      ,          
var num = 10;
console.log(num.toString(2));// 1010
console.log(num.toString(16));// a

2. String () 방법 사용
 1) 값 에 toString () 방법 이 있 으 면 이 방법 을 호출 합 니 다.
 2)  null 이 라면 'null' 로 돌아 갑 니 다.
 3) undefined 라면 'undefined' 로 돌아 갑 니 다.
let a = {
    toString: function() {
        return 'a';
    }
}
console.log(String(null), String(undefined), String(a));// null undefined a

3.4.7 개체 유형
중국어 이름 대상 은 데이터 와 기능 의 집합 입 니 다.글자 크기 와 new 두 가지 방식 으로 만 듭 니 다:
var obj1 = {};//    ,     
var obj2 = new Object();// new
var obj3 = new Object;//     ,      

Object 는 모든 대상 의 기초 입 니 다. 인 스 턴 스 는 다음 과 같은 속성 과 방법 을 가지 고 있 습 니 다.
let a = {
    age: 12
}, b = Object.create(a);//  a   b     
b.name = 'henry';

//   constructor,            
console.log(b.constructor); // [Function: Object]
//    hasOwnProperty(propertyName),                 ,      
console.log(b.hasOwnProperty('name'));// true
console.log(b.hasOwnProperty('age'));// false
//    isPrototypeOf(object),       object   
console.log(a.isPrototypeOf(b));// true
//    propertyIsEnumerable(propertyName),                for-in     。
console.log(b.propertyIsEnumerable('name')); // true
//             
Object.defineProperty(b, 'name2', {
    value: 'name2',
    enumerable: false
});
console.log(b.name2, b.propertyIsEnumerable('name2'));// name2 false
for (var property in b) {
    console.log(property);
}//  name age,     age,             
//      propertyIsEnumberable   false,               ,  
//        
console.log(b.propertyIsEnumerable('age'));//false

// toLocaleString(), toString(),            
// valueOf(),        、        。
//                    。

BOM 과 DOM 대상 이 숙주 대상 이라는 것 을 기억 하 세 요. 꼭 Object 로부터 물 려 받 을 필 요 는 없 기 때문에 이런 방법 이 없 을 수 있 습 니 다.
3.5 연산 자
3.5.1 일원 조작 부호
바로 증가 + + 와 감소 -, 1 원 + 와 -, 모두 4 개 입 니 다.그들 은 Number 형식 을 직접 조작 할 수 있 습 니 다. Number 형식 이 아니라면 배경 은 자동 으로 Number () 변환 규칙 에 따라 Number 형식 으로 바 꾼 후에 다시 작업 을 수행 합 니 다.
//    +   ,    
console.log(+'01', +'1.1', +'z', +false, +1.1); // 1 1.1 NaN 0 1.1
let a = {
    valueOf: function() {
        return 1;
    }
}, b = {
    valueOf: function() {
        return '2'
    }
}, c = {//valueOf     toString()  ,     ,       
    valueOf: function() {
        return 'a';
    }, 
    toString: function() {
        return '3';
    }
}, d = {
    toString: function() {
        return '4';
    }
};
console.log(+a, +b, +c, +d);//1 2 NaN 4

3.5.2 비트 연산 자
js 의 수 치 는 모두 64 비트 로 저장 되 어 있 습 니 다. 비트 작업 시 32 비트 만 작 동 합 니 다. 만약 에 작업 대상 이 수치 가 아니 라 다른 유형 이 라면 Number () 규칙 에 따라 먼저 수치 로 전환 한 다음 에 비트 작업 을 응용 합 니 다. 이런 조작 은 반 ~, &, 또는 |, 이상 또는 ^, 왼쪽 이동 < >, 부호 없 이 오른쪽으로 이동 > > 을 포함 합 니 다.
3.5.3 불 연산 자
1. 논리 비!
사실은 Boolean () 변환 규칙 을 적용 한 다음 에 반대 하 는 것 이다.
console.log(!false, !'blue', !NaN, !'', !12);//true false true true false

2. 논리 와 &
이 조작 은 단락 조작 이라는 것 을 기억 해라.일반적인 형식 은 조작 수 1 & & 조작 수 2 이 며, Boolean (조작 수 1) 이 true 라면 조작 수 2 를 되 돌려 주 고, Boolean (조작 수 1) 이 false 라면 조작 수 1 을 되 돌려 줍 니 다.
console.log(NaN && true);// NaN
console.log({} && 2);//2

3. 논리 또는 |
형식 은 조작 수 1 | | 조작 수 2 입 니 다. Boolean (조작 수 1) 이 true 라면 조작 수 1 을 되 돌려 줍 니 다. 그렇지 않 으 면 조작 수 2 를 되 돌려 줍 니 다.
console.log(NaN || true); // true
console.log({} || 2);// {}
// ||             ,           。
function func(param) {
    var value = param || 'no value';//  param   ,   'no value';
    console.log(value);
}
func('param');// param
func();// no value

3.5.4 곱 하기 연산 자
1. 곱셈
두 조작 수가 모두 수치 임 을 요구 하 며, 그 중 어느 하나 가 수치 가 아 닌 경우 number () 변환 규칙 을 적용 해 수치 유형 으로 먼저 변환 한 뒤 곱셈 연산 을 하고, 연산 결과 가 수치 범 위 를 넘 으 면 플러스 마이너스 무한대 표시 인 Infinity 나 - infinity 를 사용한다.
console.log(Number.MAX_VALUE * Number.MAX_VALUE); // Infinity
console.log(-Number.MAX_VALUE * Number.MAX_VALUE); // -Infinity
console.log(2*'3');//6
console.log('3'*'4'); // 12
console.log('a'*'b'); // NaN
console.log(2 * Number.POSITIVE_INFINITY);// Infinity

2. 나눗셈
곱셈 과 유사 하 다.
console.log(6/'3');// 2
console.log('12'/'4'); // 3
console.log('a'/'b'); // NaN
console.log(0/0);// NaN
console.log(2/0);// Infinity
console.log(-2/0);// -Infinity
console.log(Number.POSITIVE_INFINITY/1);// Infinity

3. 모델 링
위의 것 과 모두 유사 하 다.
3.5.5 플러스 연산 자
1. 덧셈
하나의 조작 수가 문자열 이 라면 다른 것 도 문자열 로 연결 합 니 다.
console.log(2+3); // 5
console.log(2+'2'); // 22
console.log(undefined+undefined); // NaN
console.log(null+null);//0
console.log(2+NaN);//NaN
console.log(Infinity + 3);// Infinity
console.log(Infinity + 'a');//Infinitya

2. 감법
덧셈 과 유사 하지만, 다른 것 은 뺄셈 은 두 조작 수가 모두 수치 유형 이 어야 하기 때문에 그 중 에 그렇지 않 은 것 이 있 으 면 Number () 변환 규칙 을 적용 한다.
console.log(5- true);//4
console.log(NaN-1);//NaN
console.log(4-'2');//2
console.log(5-null);//5
let a = {
    valueOf: function() {
        return 1;
    }
}, b = {
    toString: function() {
        return '2';
    }
}, c = {};
console.log(a-0, b-0, c-0);// 1 2 NaN

3.5.6 관계 조작 부호
4 가 지 를 감 싸 고, 크 고, 작 으 며, 같 고, 작 으 면 같 습 니 다. 두 동작 수가 모두 문자열 이 라면 문자열 의 사전 순서에 따라 크기 를 비교 하고, 그렇지 않 으 면 Number () 규칙 에 따라 수치 로 변환 한 다음 비교 합 니 다.
console.log('23' < '3');// true
console.log('23' < 3); // false
//    NaN  ,    false
console.log(NaN<3, NaN >=3);// false false

3.5.7 같은 조작 부호
두 조 의 조작 부호 가 있다.
1. 같 거나 같 지 않 음
즉 = = 와! = 두 개의 조작 부호 로 비교적 규칙 이 특수 하 다.
  • 두 동작 수가 모두 문자열 이 라면 내용 이 같 는 지, 대상 이 라면 인용 이 같은 지 비교 합 니 다. 그렇지 않 으 면 Number () 변환 규칙 을 사용 하여 변환 합 니 다.
  • 일부 특수 한 상황 이 있 습 니 다. null 과 undefined 가 같 습 니 다. 만약 에 하나의 조작 수가 NaN 이 라면 같은 조작 은 false 로 돌아 가 고 같은 조작 은 true 로 돌아 가지 않 습 니 다.
  • 2. 전등화 부전 등
    즉 = = = 와! = =, 이 두 조작 부 호 는 조작 수가 먼저 하나의 유형 이 어야 하 며, 유형 이 다 르 면 전체 조작 은 반드시 false 일 것 이다.
    console.log('55' == 55);//true
    console.log('55' === 55);//false

    3.5.8 조건 조작 부호
    variable = boolean_expression? true_value: false_value;
    boolean expression 이 true 라면 true value 를 되 돌려 줍 니 다. 그렇지 않 으 면 false value 를 되 돌려 줍 니 다.
    3.5.9 할당 연산 자
    있다 =, + =, * =, / =, - =, < =, > =, > > > = =
    3.5.10 쉼표 연산 자
    //          
    var a, b, c;
    //     ,            
    var d = (1, 2, 3, 4);
    console.log(d);//4

    3.6 문
    if, do - while, for, break, continue, lable, switch 는 다른 언어 와 유사 하여 할 말 이 없다.
    with 문 구 는 추천 하지 않 으 면 말 하지 않 습 니 다.
    for - in 구문
    매 거 대상 의 속성 을 사용 합 니 다.
    let a = {
        name: 'name',
        value: 'value'
    };
    for (var prop in a) {
        console.log(prop);
    }
    // name
    // value

    switch 구문
    switch 는 약간 특수 합 니 다. switch 에 서 는 모든 데이터 형식 을 사용 할 수 있 습 니 다. case 에 서 는 상수, 변수 또는 표현 식 일 수 있 습 니 다.
    switch ('hello world') {
        case 'hello' + ' world':
            console.log('greeting was found');
            break;
        default:
            console.log('not found');
    }
    // greeting was found

    3.7 함수
    문법
    function functionName(arg0, arg1, ... argN) {
        statement
    }
    엄격 한 모드 에서 제한 이 있 습 니 다. 함수 나 인 자 를 eval 또는 arguments 라 고 명명 하지 마 십시오.
    /*
            arguments  ,          , length  ,
              ,arguments[i]   i+1   
    */
    function howManyArgs(a, b, c) {
        console.log(arguments.length);
    }
    howManyArgs(1,2,3);//3
    howManyArgs(1,2);//2
    
    // js      ,                ,
    //         ,    arguments     
    //        ,           ,       
    function add(a, b) {
        console.log(a+b);
    }
    function add(a) {//           
        console.log(a+100);
    }
    add(1,2);// 101
    add(1);// 101
    
    

     

    좋은 웹페이지 즐겨찾기