JavaScript isset() 등가
에서는 PHP를 사용할 수 .if(isset($array['foo'])) { ... }
에서는 JavaScript를 자주 if(array.foo) { ... }
이 는 또한 false가 false인 경우에도 false로 됩니다.array.foo
하지만 있다false
★★★★★★★★★★★★★★★★★」0
(서양속담, 돈속담)
PHP에 한 것은 입니까?isset
JavaScript?
넓은 의미에서 존재하지 않는 변수, 값이 없는 변수 등에 대한 JavaScript의 일반적인 완전한 가이드가 편리할 것이다.
업데이트: 11년 11개월 전에 이 질문을 올렸습니다.와, 아직도 많은 액티비티를 받고 있습니다.이 글을 쓸 때는 연관 배열(사전)에 속성이 있는지 확인하는 방법만 알고 싶었기 때문에 올바른 답변은 다음과 같습니다.hasOwnProperty
★★★in
변수를 하는 것에 이 없었어요저는 지역이나 글로벌 변수를 확인하는 데 관심이 없었습니다.
하지만 나는 그것을 잘 기억하고 있지만, 그 의도는 쓰여진 그대로의 질문이나 심지어 그것에 의해 직접적으로 부정되는 질문에는 그다지 명확하지 않다.의 PHP에 .isset
뭇매를 맞다질문에서 자신의 요구 사항을 적절하게 기술하는 것이 얼마나 중요한지, 또한 글로벌 변수, 로컬 변수, 객체 속성, 사전 키 및 Huey, Dewey, Louie가 아닌 것이 얼마나 중요한지에 대한 교훈을 얻으십시오.
그동안 많은 분들이 그 취지에 대한 답변을 해주셨기 때문에 구글을 통해 이 질문을 찾으신 분들께 저의 애매함이 도움이 되어 다행이라고 생각합니다.어쨌든, 그걸 확실히 하고 싶었을 뿐이야.
일반적으로 연산자를 사용합니다.
if (typeof obj.foo !== 'undefined') {
// your code here
}
은 반환될 이다."undefined"
속성이 존재하지 않거나 그 값이 다음과 같은 경우undefined
.
오브젝트에 속성이 존재하는지 여부를 확인하는 방법에는 다음과 같은 다른 방법이 있습니다.
if (obj.hasOwnProperty('foo')) {
// your code here
}
★★★★★★★★★★★★★★★★.in
★★★★★★★★★★★★★★★★★★:
if ('foo' in obj) {
// your code here
}
두 요.hasOwnProperty
메서드는 속성이 개체에 물리적으로 존재하는지 확인합니다(속성은 상속되지 않음).
in
오퍼레이터는 프로토타입 체인에서 도달할 수 있는 모든 속성을 확인합니다. §:
var obj = { foo: 'bar'};
obj.hasOwnProperty('foo'); // true
obj.hasOwnProperty('toString'); // false
'toString' in obj; // true
바와 같이, '우리'는 '우리'입니다.hasOwnProperty
false
및in
가 반환하다true
할 때toString
이. 왜냐하면 이 방법은 시제품 체인에서 정의되어 있습니다. 왜냐하면obj
Object.prototype
.
입니다만, 을 실행하는 .isset()
.
ESNext (2019년 12월 4일 스테이지)
가지 '어느새'의 사용을 간소화할 수 .isset()
★★★★
문서를 읽고 브라우저 호환성에 유의하십시오.
정답.
자세한 것은, 이하를 참조해 주세요.주의: 스탠다드 사용JS 구문
사용 예
// IMPORTANT pass a function to our isset() that returns the value we're
// trying to test(ES6 arrow function)
isset(() => some) // false
// Defining objects
let some = { nested: { value: 'hello' } }
// More tests that never throw an error
isset(() => some) // true
isset(() => some.nested) // true
isset(() => some.nested.value) // true
isset(() => some.nested.deeper.value) // false
// Less compact but still viable except when trying to use `this` context
isset(function () { return some.nested.deeper.value }) // false
응답 기능
/**
* Checks to see if a value is set.
*
* @param {Function} accessor Function that returns our value
* @returns {Boolean} Value is not undefined or null
*/
function isset (accessor) {
try {
// Note we're seeing if the returned value of our function is not
// undefined or null
return accessor() !== undefined && accessor() !== null
} catch (e) {
// And we're able to catch the Error it would normally throw for
// referencing a property of undefined
return false
}
}
NPM 패키지
는 '응답'으로 할 수 있습니다.isset-php
NPM이 되다패키지에는 유형 확인 및 다중 인수 지원 등 몇 가지 향상된 기능이 포함되어 있습니다.
npm install --save isset-php
문서 전문은 README에서 구할 수 있습니다.
const isset = require('isset-php')
let val = ''
// This will evaluate to true so the text will be printed.
if (isset(() => val)) {
console.log('This val is set so I will print.')
}
설명.
PHP
할 수 한 PHP가 됩니다.배열로서 비배열에 액세스하려고 해도 단순이 반환됩니다.true
★★★★★★★★★★★★★★★★★」false
:
// Referencing an undeclared variable
isset($some); // false
$some = 'hello';
// Declared but has no depth(not an array)
isset($some); // true
isset($some['nested']); // false
$some = ['nested' => 'hello'];
// Declared as an array but not with the depth we're testing for
isset($some['nested']); // true
isset($some['nested']['deeper']); // false
자바스크립트
JavaScript에서는 엔진이 JavaScript 에 항상 엔진이 즉시 다음 값에 액세스하려고 하기 때문에 동일한 작업을 수행하면 항상 오류가 발생합니다.deeper
의 우 our에 포장할 수 하기 isset()
★★★★★★★★★★…
// Common pitfall answer(ES6 arrow function)
const isset = (ref) => typeof ref !== 'undefined'
// Same as above
function isset (ref) { return typeof ref !== 'undefined' }
// Referencing an undeclared variable will throw an error, so no luck here
isset(some) // Error: some is not defined
// Defining a simple object with no properties - so we aren't defining
// the property `nested`
let some = {}
// Simple checking if we have a declared variable
isset(some) // true
// Now trying to see if we have a top level property, still valid
isset(some.nested) // false
// But here is where things fall apart: trying to access a deep property
// of a complex object; it will throw an error
isset(some.nested.deeper) // Error: Cannot read property 'deeper' of undefined
// ^^^^^^ undefined
실패하는 다른 대안:
// Any way we attempt to access the `deeper` property of `nested` will
// throw an error
some.nested.deeper.hasOwnProperty('value') // Error
// ^^^^^^ undefined
// Similar to the above but safe from objects overriding `hasOwnProperty`
Object.prototype.hasOwnProperty.call(some.nested.deeper, 'value') // Error
// ^^^^^^ undefined
// Same goes for typeof
typeof some.nested.deeper !== 'undefined' // Error
// ^^^^^^ undefined
또, 용장성을 단시간에 얻을 수 있는 몇개의 유효한 대체 수단도 있습니다.
// Wrap everything in try...catch
try {
if (isset(some.nested.deeper)) {
// ...
}
} catch (e) {}
try {
if (some.nested.deeper !== undefined && some.nested.deeper !== null) {
// ...
}
} catch (e) {}
// Or by chaining all of the isset which can get long
isset(some) && isset(some.nested) && isset(some.nested.deeper) // false
// ^^^^^^ returns false so the next isset() is never run
결론
다른 모든 답변 - 대부분은 실행 가능하지만...
- 변수가 정의되어 있지 않은지 확인하고 있을 뿐이며, 일부 사용 예에서는 문제가 없지만 오류가 발생할 수 있습니다.
- 최고 수준의 속성에만 액세스하려고 한다고 가정합니다. 일부 사용 사례에 대해서도 마찬가지입니다.
- PHP에 이지 않은 합니다.
isset()
★★isset(some, 'nested.deeper.value')
eval()
합니다.
많이 커버한 것 같아요.내 답변에서 언급하지 않는 몇 가지 요점이 있습니다. 왜냐하면 그것들은 관련이 있지만 질문의 일부가 아니기 때문입니다(예: 단락).다만, 필요에 따라서, 요구에 근거해 보다 기술적인 측면에의 링크를 붙여 답변을 갱신할 수 있습니다.
나는 이것에 많은 시간을 할애해서 그것이 사람들에게 도움이 되기를 바란다.
읽어주셔서 감사합니다!
module.exports = function isset () {
// discuss at: http://locutus.io/php/isset/
// original by: Kevin van Zonneveld (http://kvz.io)
// improved by: FremyCompany
// improved by: Onno Marsman (https://twitter.com/onnomarsman)
// improved by: Rafał Kukawski (http://blog.kukawski.pl)
// example 1: isset( undefined, true)
// returns 1: false
// example 2: isset( 'Kevin van Zonneveld' )
// returns 2: true
var a = arguments
var l = a.length
var i = 0
var undef
if (l === 0) {
throw new Error('Empty isset')
}
while (i !== l) {
if (a[i] === undef || a[i] === null) {
return false
}
i++
}
return true
}
phpjs.org는 대부분 locutus를 위해 폐기되었습니다.여기 새로운 링크가 있습니다.http://locutus.io/php/var/isset
if (!('foo' in obj)) {
// not set.
}
//
// tring to reference non-existing variable throws ReferenceError
// before test function is even executed
//
// example, if you do:
//
// if ( isset( someVar ) )
// doStuff( someVar );
//
// you get a ReferenceError ( if there is no someVar... )
// and isset fn doesn't get executed.
//
// if you pass variable name as string, ex. isset( 'novar' );,
// this might work:
//
function isset ( strVariableName ) {
try {
eval( strVariableName );
} catch( err ) {
if ( err instanceof ReferenceError )
return false;
}
return true;
}
//
//
이 심플한 솔루션은 기능하지만 상세한 객체 체크에는 적합하지 않습니다.
function isset(str) {
return window[str] !== undefined;
}
기본 변수와 배열 및 객체의 오류를 방지하기 위해 항상 이 일반 기능을 사용합니다.
isset = function(obj) {
var i, max_i;
if(obj === undefined) return false;
for (i = 1, max_i = arguments.length; i < max_i; i++) {
if (obj[arguments[i]] === undefined) {
return false;
}
obj = obj[arguments[i]];
}
return true;
};
console.log(isset(obj)); // returns false
var obj = 'huhu';
console.log(isset(obj)); // returns true
obj = {hallo:{hoi:'hoi'}};
console.log(isset(obj, 'niet')); // returns false
console.log(isset(obj, 'hallo')); // returns true
console.log(isset(obj, 'hallo', 'hallo')); // returns false
console.log(isset(obj, 'hallo', 'hoi')); // returns true
이 솔루션은 나에게 효과가 있었다.
function isset(object){
return (typeof object !=='undefined');
}
당신이 언더스코어를 사용한다면 나는 항상 사용한다.
if (!_.isUndefined(data) && !_.isNull(data)) {
//your stuff
}
이것은 변수가 존재하는지 테스트하기 위한 매우 뛰어난 방탄 솔루션입니다.
var setOrNot = typeof variable !== typeof undefined ? true : false;
유감스럽게도 단순히 함수에 캡슐화할 수는 없습니다.
다음과 같은 것을 생각할 수 있습니다.
function isset(variable) {
return typeof variable !== typeof undefined ? true : false;
}
단, 변수일 경우 참조 오류가 발생합니다.variable
하지 않는 할 수 않습니다.
수집되지 않은 참조 오류: foo가 정의되지 않았습니다.
한편, 함수 파라미터가 정의되어 있지 않은지 여부를 테스트할 수 있습니다.
var a = '5';
var test = function(x, y) {
console.log(isset(x));
console.log(isset(y));
};
test(a);
// OUTPUT :
// ------------
// TRUE
// FALSE
「」의 , 「」의 값은 없습니다.y
「」에 .test
회사, 우리 회사isset
합니다.왜냐하면, 이 문맥에서는 기능하지 않기 입니다. 왜냐하면y
이 있다test
로 undefined
discloss.discloss 。
window.isset = function(v_var) {
if(typeof(v_var) == 'number'){ if(isNaN(v_var)){ return false; }}
if(typeof(v_var) == 'undefined' || v_var === null){ return false; } else { return true; }
};
+ 테스트:
https://gist.github.com/daylik/24acc318b6abdcdd63b46607513ae073
(typeof SOMETHING) !== 'undefined'
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★, 지만 the the the the the the the the는 패키징할 수 typeof
함수를 호출하기 전에 오류가 발생하므로 다음과 같이 키워드를 함수에 입력합니다.
function isdef($var) {
return (typeof $var) !== 'undefined';
}
isdef(SOMETHING); ///// thrown error: SOMETHING is not defined
그래서 방법을 찾아냈어
function isdef($type) {
return $type !== 'undefined';
}
isdef(typeof SOMETHING);
개별 변수(전혀 존재하지 않는 변수) 또는 개체 속성(존재하지 않는 속성) 모두와 함께 작동할 수 있습니다. PHP PHP 밖에 더 없습니다.isset
.
function isset(variable) {
try {
return typeof eval(variable) !== 'undefined';
} catch (err) {
return false;
}
}
wether html block이 존재하는지 확인하기 위해 다음 코드를 사용합니다.
if (typeof($('selector').html()) != 'undefined') {
// $('selector') is existing
// your code here
}
하면 이 합니다.hasOwnProperty
각 단계에서 오브젝트 자체를 덮어쓰면서 반복할 수 있습니다.
ES6 환경에서 코딩하는 경우 이 stackoverflow Ques를 참조하십시오.
var a;
a = {
b: {
c: 'e'
}
};
function isset (obj, path) {
var stone;
path = path || '';
if (path.indexOf('[') !== -1) {
throw new Error('Unsupported object path notation.');
}
path = path.split('.');
do {
if (obj === undefined) {
return false;
}
stone = path.shift();
if (!obj.hasOwnProperty(stone)) {
return false;
}
obj = obj[stone];
} while (path.length);
return true;
}
console.log(
isset(a, 'b') == true,
isset(a, 'b.c') == true,
isset(a, 'b.c.d') == false,
isset(a, 'b.c.d.e') == false,
isset(a, 'b.c.d.e.f') == false
);
변수나 오브젝트를 체크할 수 있는 기능을 사용하고 있습니다.jQuery로 작업하기 매우 편리함
function _isset (variable) {
if(typeof(variable) == "undefined" || variable == null)
return false;
else
if(typeof(variable) == "object" && !variable.length)
return false;
else
return true;
};
Javascript에서 PHP의 빈 함수 같은 함수를 만들어 보세요.이게 도움이 되길.
function empty(str){
try{
if(typeof str==="string"){
str=str.trim();
}
return !(str !== undefined && str !== "undefined" && str !== null && str!=="" && str!==0 && str!==false);
}catch(ex){
return true;
}
}
console.log(empty(0))//true
console.log(empty(null))//true
console.log(empty(" "))//true
console.log(empty(""))//true
console.log(empty(undefined))//true
console.log(empty("undefined"))//true
var tmp=1;
console.log(empty(tmp))//false
var tmp="Test";
console.log(empty(tmp))//false
var tmp=" Test ";
console.log(empty(tmp))//false
var tmp={a:1,b:false,c:0};
console.log(empty(tmp.a))//false
console.log(empty(tmp.b))//true
console.log(empty(tmp.c))//true
console.log(empty(tmp.c))//true
console.log(empty(tmp.c.d))//true
마침내 나는 쉬운 해결책으로 문제를 해결했다:
if (obj && obj.foo && obj.foo='somethings'){
console.log('i,m work without error')
}
PHP 매뉴얼 설명:
isset : 변수가 설정되어 있고 NULL이 아닌지 확인합니다.
인터페이스에는 다음과 같은 것이 있습니다.
bool isset ( mixed $var [, mixed $... ] )
'''$var
파라미터는 임의로 지정할 수 있습니다.
은 isset()을 반환합니다.TRUE
가 하고 var 이외의 을 갖는 NULL
FALSE
렇지지그
몇 가지 예:
$foo = 'bar';
var_dump(isset($foo)); -> true
$baz = null;
var_dump(isset($baz)); -> false
var_dump(isset($undefined)); -> false
에 두고 php와 을 쓸 수 것 .isset()
다음과 같이 합니다.를를들,, 음음음음음음음음 음음음음음음
if (isset(some_var)) {
}
function issset() {
// function definition
}
트리거 Javascript 리리 jav jav javUncaught ReferenceError: some_var is not defined at (file_name):line_number
이 동작의 중요성과 주목할 점은 존재하지 않는 변수를 일반 함수에 전달하려고 하면 오류가 발생한다는 것입니다.
, PHP 에에 php php butisset()
실제로는 정규 함수가 아니라 언어 구성입니다.즉, 이들은 PHP 언어 자체의 일부이며, 일반적인 함수 규칙에 따라 재생되지 않으므로 존재하지 않는 변수에 대한 오류를 트리거하지 않아도 됩니다.이것은 변수가 존재하는지 여부를 확인할 때 중요합니다.단, javscript에서는 존재하지 않는 변수를 사용하여 함수 호출이라고 하는 오류가 발생합니다.
내 요점은 등가 javscript 함수로 쓸 수는 없지만 이와 같은 것은 할 수 있다는 것이다.
if (typeof some_var !== 'undefined') {
// your code here
}
이 "ph" 이 아닙니다.NULL
예를들면
$baz = null;
var_dump(isset($baz)); -> false
이를 javascript에 포함시키면 다음과 같이 됩니다.
if (typeof some_var !== 'undefined' && some_var !== null) {
// your code here
}
오브젝트의 더 깊은 속성에 액세스 할 때 매우 문제가 있었기 때문에 속성 값이 있으면 false를 반환하는 함수를 만들었습니다.시간을 절약하는 데 쓸 수도 있지만
//Object on which we want to test
var foo = {
bar: {
bik: {
baz: 'Hello world'
}
}
};
/*
USE: To get value from the object using it properties supplied (Deeper),
if found it will return the property value if not found then will return false
You can use this function in two ways
WAY - 1:
Passing an object as parameter 1 and array of the properties as parameter 2
EG: getValueFromObject(foo, ['bar', 'bik', 'baz']);
WAY - 2: (This will work only if, your object available in window object)
Passing an STRING as parameter 1(Just similarly how we retrieve value form object using it's properties - difference is only the quote)
EG: getValueFromObject('foo.bar.bik.baz');
*/
function getValueFromObject(object, properties) {
if(typeof(object) == 'string') { //Here we extract our object and it's properties from the string
properties = object.split('.');
object = window[properties[0]];
if(typeof(object) == 'undefined') {
return false;
}
properties.shift();
}
var property = properties[0];
properties.shift();
if(object != null && typeof(object[property]) != 'undefined') {
if(typeof(object[property]) == 'object') {
if(properties.length != 0) {
return getValueFromObject(object[property], properties); //Recursive call to the function
} else {
return object[property];
}
} else {
return object[property];
}
} else {
return false;
}
}
console.log(getValueFromObject('fooo.bar.bik.baz')); //false
console.log(getValueFromObject('foo.bar.bik.baz')); //Hello world
console.log(getValueFromObject('foo')); //false
console.log(getValueFromObject('foo.bar.bik')); //returns an object { baz: 'Hello World' }
console.log(getValueFromObject(foo, ['bar', 'bik'])); //returns an object { baz: 'Hello World' }
console.log(getValueFromObject(foo, ['bar', 'bik', 'baz']));//Hello world
요소가 존재하는지 확인하려면 다음 코드를 사용하십시오.
if (object) {
//if isset, return true
} else {
//else return false
}
다음은 샘플입니다.
function switchDiv() {
if (document.querySelector("#divId")) {
document.querySelector("#divId").remove();
} else {
var newDiv = document.createElement("div");
newDiv.id = "divId";
document.querySelector("body").appendChild(newDiv);
}
}
document.querySelector("#btn").addEventListener("click", switchDiv);
#divId {
background: red;
height: 100px;
width: 100px;
position: relative;
}
<body>
<button id="btn">Let's Diiiv!</button>
</body>
ES6에서는 let 변수 선언을 체크하고 선언할 경우 이전 솔루션이 모두 작동하지 않습니다.
예
let myTest = 'text';
if(typeof myTest === "undefined") {
var myTest = 'new text'; // can't be a let because let declare in a scope
}
에러가 표시됩니다.
학습되지 않은 구문 오류:식별자 'myTest'가 이미 선언되었습니다.
해결책은 그것을 다른 방법으로 바꾸는 것이었다.
var myTest = 'text'; // I replace let by a var
if(typeof myTest === "undefined") {
var myTest = 'new text';
}
var로 let를 변경할 수 있는 경우 var를 제거해야 합니다.
let myTest = 'text';
if(typeof myTest === "undefined") {
myTest = 'new text'; // I remove the var declaration
}
try {
const value = array.foo.object.value;
// isset true
} catch (err) {
// isset false
}
배열 또는 중첩 배열에 이 함수를 사용합니다(문자열에는 사용 안 함).
if(isset(array,'key1=>key1')){alert('isset');}
https://jsfiddle.net/dazzafact/cgav6psr/
arr={nested:{nested2:{val:'isset'}}}
if(t=isset(arr,'nested=>nested2=>val','=>')){
alert(t)
}
function isset(obj,nested,split) {
var sep=split || '.';
var dub=obj
var isset=false
if(typeof(obj)!="undefined" && typeof(nested)!="undefined"){
var arr=nested.split(sep);
for(var k in arr){
var key=arr[k];
if(typeof(dub[key])=="undefined"){
isset=false;
break;
}
dub=dub[key];
isset=dub
}
}
return isset;
}
let test = {
a: {
b: [0, 1]
}
};
console.log(test.isset('a.b')) // true
console.log(test.isset('a.b.1')) // true
console.log(test.isset('a.b.5')) // false
console.log(test.isset('a.c')) // false
console.log('abv'.isset('0')) // true
isset('user.permissions.saveProject', args);
function isset(string, context) {
try {
var arr = string.split('.');
var checkObj = context || window;
for (var i in arr) {
if (checkObj[arr[i]] === undefined) return false;
checkObj = checkObj[arr[i]];
}
return true;
} catch (e) {
return false;
}
}
if (var) {
// This is the most concise equivalent of Php's isset().
}
의 Php에 입니다.isset()
:
if(var == undefined)
true
은 var(바)!isset
false
은 var(바)isset
언급URL : https://stackoverflow.com/questions/2281633/javascript-isset-equivalent
'IT' 카테고리의 다른 글
Ng-model이 컨트롤러 값을 업데이트하지 않음 (0) | 2023.02.06 |
---|---|
x초마다 메서드/함수를 트리거하는 Vue js (0) | 2023.02.06 |
원칙은 컬렉션의 마지막 엔티티만 유지합니다.유형 (0) | 2023.02.06 |
JavaScript를 사용하여 HTML 페이지 제목을 얻는 방법 (0) | 2023.02.06 |
JavaScript에서 "정의되지 않음"을 확인하려면 어떻게 해야 합니까? (0) | 2023.02.06 |