본문 바로가기

Programming110

[Javascript] Object Clone하기(shallow copy/deep copy) shallow copy: {...obj}, Object.assign({}, obj) deep copy: JSON.parse(JSON.stringify(obj)) let obj = { a: 1, b: 2, c: { level: 1 } }; // Spread Operator를 사용하는 방법 let newObject1 = { ...obj }; // Object.assign을 사용하는 방법 let newObject2 = Object.assign({}, obj); // JSON.stringify 후 JSON.parse하는 방법(조잡하다...) let newObject3 = JSON.parse(JSON.stringify(obj)); // 모두 같다 console.log(newObject1.c.level); // 1.. 2021. 6. 30.
[C#] DataRow Clone하기 DataTable을 사용하다 보면 DataRow를 해야 할 때가 있다. var firstRow = dataTable.Rows[0]; Table.Rows.Add(firstRow); 이렇게 사용하면 아래 에러가 발생한다. This row already belongs to this table. dataTable의 ImportRow() Method를 이용하면 된다. var firstRow = dataTable.Rows[0]; dataTable.ImportRow(firstRow); .Net fiddle에서 확인 가능하다. https://dotnetfiddle.net/W9h7bj 2021. 6. 29.
DOM Element의 ID는 전역 변수로 사용할 수 있다. DOM element의 id는 전역 변수로써 사용할 수 있다. 아무리 생각해도 글로 설명하기 어렵다. 아래 예시가 이해하기 쉬울 것이다. HTML JS test.innerText = "this is text"; https://jsfiddle.net/jjhan/u2bqL4dw/1/ 오늘 element id와 전역함수의 이름이 공교롭게도 같아서 클라이언트단에서 에러가 발생했다. Uncaught ReferenceError: something is not defined 일반적으로 DOM element의 id는 prefix(btn, select 등등)를 붙이기 때문에 충돌이 발생할 경우는 없지만 이 사실을 몰랐더라면 꽤나 헤맬 수 있었던 이슈다. 운이 좋게 이직 전에 이 사실을 알게 되어서 쉽게 찾아서 고칠 수 .. 2021. 6. 25.
[MS-SQL] 임시 테이블(#, ##) MS SQL Server에서 임시 테이블을 만들기 위해서는 #과 ##을 이용하면 된다. #을 붙이면 현재 세션에서만 사용 가능하다. ##을 붙이면 다른 connection에서도 사용 가능하다(global temporary table). SQL Server는 자동으로 임시 생성했던 테이블을 Connection이 close될 때 제거해준다. 하지만 개인적으로 DROP TABLE로 꼭 지워준다.😄 CREATE TABLE #TEMP ( Memo VARCHAR(MAX) ); CREATE TABLE #GLOBAL_TEMP ( Memo VARCHAR(MAX) ); 2021. 6. 24.
[javascript] 빈 Object 확인하는 법 javascript에서 빈 object({})인지 확인하려면 아래와 같이 확인하면 된다(ES5 이상). var isEmptyObject = obj && Object.keys(obj).length === 0 && obj.constructor === Object 주의할 점 만약 빈 object가 아닌 경우를 조건으로 할때 isEmptyObject === false 조건을 이용해야 한다. !isEmptyObject 의 경우 obj가 null일때 문제가 된다. null && true, null && false 모두 null이고 !null은 true이기 때문이다. if (isEmptyObject === false) // 이렇게 사용 if (!isEmptyObject) // 사용 x, obj가 null인 경우 문제 2021. 6. 16.
[C#] SqlParameterCollection 에러 The SqlParameter is already contained by another SqlParameterCollection SqlParameter이(가) 이미 다른 SqlParameterCollection에 들어 있습니다. 위와 같이 DB SQL 실행을 하는 method를 2번 호출하면 볼 수 있는 에러다. using 문이 끝나서 SqlCommand가 Dispose() 되어도 SqlParameter가 어떤 SqlCommand에서 사용되었는지 정보를 저장하고 있는 것 같다. SqlCommand.Parameters.Clear() method를 이용해서 해당 SqlCommand의 SQL parameter를 초기화해서 에러를 방지할 수 있다. command.Parameters.Clear(); 아래 소스코드.. 2021. 6. 14.
JSDoc C#의 처럼 javascript도 class나 function에 대한 설명을 표시할 수 있었다. 😮 아래와 같이 es5 class 구조를 만들고 있다. parameter에 대한 설명을 해당 format에 맞춰서 표시한다면 Visual Studio 2019에서 다음과 같이 preview를 볼 수 있다. 커서에 아까 주석에 적었던 해당 class의 설명이 표시된다. 이렇게 잘 설명을 적어놓으면 다른 사람이 기능을 사용할 때 큰 도움이 될 것 같다. 팀에도 제안해야겠다. Reference https://jsdoc.app/about-getting-started.html https://devhints.io/jsdoc 2021. 6. 10.
offsetWidth, scrollWidth, clientWidth 차이 맨날 검색을 해도해도 헷갈리는 offsetWidth, scrollWidth, clientWidth offsetWidth: border를 포함한 width scrollWidth: scroll할 수 있는 숨겨진 영역을 합한 width clientWidth: width(border, scroll bar 포함하지 않음) jsfiddle에서 한 눈에 볼 수 있다. http://jsfiddle.net/y8Y32/25/ 2021. 6. 8.
#과 javascript:void(0);의 차이 href="#" 는 클릭 시 해당 페이지의 가장 상단으로 이동하게 된다. href="javascript:void(0); 는 아무일도 벌어지지 않는다. 아래 codepen에서 확인해보자 https://codepen.io/jaejoon/pen/VwpxNoW 아래에 있는 #을 누르면 가장 위로 이동하는 것을 알 수 있다. 반면 javascript:void(0);은 아무일도 일어나지 않는다. Reference https://codesource.io/vs-javascriptvoid0-which-one-is-the-best-attribute-for-empty-links/ 2021. 6. 7.