జావాస్క్రిప్ట్ సాధారణ ఎరర్స్

本章指出一些常见的 JavaScript 错误。

意外使用赋值运算符

如果程序员在 if 语句中意外使用赋值运算符(=)而不是比较运算符(===),JavaScript 程序可能会产生一些无法预料的结果。

这条 if 语句返回 false(正如预期),因为 x 不等于 10:

var x = 0;
if (x == 10) 

亲自试一试

这条 if 语句返回 true(也许不像预期),因为 10 为 true:

var x = 0;
if (x = 10) 

亲自试一试

这条 if 语句返回 false(也许不像预期),因为 0 为 false:

var x = 0;
if (x = 0) 

亲自试一试

赋值总是返回赋值的值。

期望松散的比较

在常规比较中,数据类型不重要。这条 if 语句返回 true:

var x = 10;
var y = "10";
if (x == y) 

亲自试一试

在严格比较中,数据类型确实重要。这条 if 语句返回 false:

var x = 10;
var y = "10";
if (x === y) 

亲自试一试

有一个常见的错误是忘记在 switch 语句中使用严格比较:

这条 switch 语句会显示提示框:

var x = 10;
switch(x) {
    case 10: alert("Hello");
}

亲自试一试

这条 switch 语句不会显示提示框:

var x = 10;
switch(x) {
    case "10": alert("Hello");
}

亲自试一试

ఆశ్చర్యకరమైన జోడించడం మరియు క్యాచ్ క్యాన్షనేషన్

జోడించడంజోడించడానికి ఉపయోగిస్తారునమూనా

క్యాచ్ క్యాన్షనేషన్జోడించడానికి ఉపయోగిస్తారుస్ట్రింగ్

జావాస్క్రిప్ట్‌లో, ఈ రెండు ఆపరేషన్లు కూడా ఒకే ఆపరేటర్ను ఉపయోగిస్తాయి + ఆపరేటర్స్

ఈ కారణంగా, సంఖ్యలను సంఖ్యల వలె జోడించడం మరియు సంఖ్యలను స్ట్రింగ్ ల వలె జోడించడం వలన, వేర్వేరు ఫలితాలు ఉంటాయి:

var x = 10 + 5;          // x లో ఫలితం 15
var x = 10 + "5";         // x లో ఫలితం "105"

亲自试一试

రెండు వేర్వేరు వేరుశబ్దాలు జోడించినప్పుడు, ఫలితం అంచనా కనుగొనడం చాలా కష్టం

var x = 10;
var y = 5;
var z = x + y;            // z లో ఫలితం 15
var x = 10;
var y = "5";
var z = x + y;            // z లో ఫలితం "105"

亲自试一试

ఆశ్చర్యకరమైన ఫ్లోటింగ్ పాయింట్స్

జావాస్క్రిప్ట్‌లో సంఖ్యలు అన్నింటికీ 64 బిట్స్ గా నిర్వహించబడతాయి浮点数(Floats)

అన్ని ప్రోగ్రామింగ్ భాషలు, జావాస్క్రిప్ట్ కూడా, ఫ్లోటింగ్ విలువలను నిర్వహించడానికి కష్టం ఉంటుంది:

var x = 0.1;
var y = 0.2;
var z = x + y             // z లో ఫలితం 0.3 కాదు

亲自试一试

ముందస్తు సమస్యను పరిష్కరించడానికి గణాంకాలను ఉపయోగించండి:

实例

var z = (x * 10 + y * 10) / 10;       // z లో ఫలితం 0.3 ఉంటుంది

亲自试一试

జావాస్క్రిప్ట్ స్ట్రింగ్ లో పరివర్తించండి

JavaScript ఒక పద్యాన్ని రెండు వరుసలుగా పరివర్తించడానికి అనుమతిస్తుంది:

ఉదాహరణ 1

var x =
"Hello World!";

亲自试一试

కానీ పద్యం మధ్యలో పరివర్తించడం తప్పు ఉంది:

ఉదాహరణ 2

var x = "Hello
World!";

亲自试一试

కానీ పద్యంలో పరివర్తించడానికి మింగిల్ చిహ్నాన్ని ఉపయోగించాలి:

ఉదాహరణ 3

var x = "Hello ",
World!";

亲自试一试

తప్పు సెకండ్

ఒక తప్పు సెకండ్ కారణంగా, ఈ కోడ్ బ్లాక్ x యొక్క విలువకు అన్ని విధాలుగా పని చేస్తుంది:

if (x == 19);
{
     // కోడ్ బ్లాక్
}

亲自试一试

return పద్యాన్ని పరివర్తించండి

ఒక వరుస చివరివద్ద స్వయంచాలకంగా పద్యాన్ని మూసివేయేది జావాస్క్రిప్ట్ యొక్క డిఫాల్ట్ ప్రవర్తన

ఈ కారణంగా, ఈ రెండు ఉదాహరణలు అదే ఫలితాన్ని తిరిగి చేస్తుంది:

ఉదాహరణ 1

function myFunction(a) {
    var power = 10  
    return a * power
}

亲自试一试

ఉదాహరణ 2

function myFunction(a) {
    var power = 10;
    return a * power;
}

亲自试一试

JavaScript ఒక పద్యాన్ని రెండు వరుసలుగా పరివర్తించడానికి అనుమతిస్తుంది:

ఈ కారణంగా, ఉదాహరణ 3 కూడా అదే ఫలితాన్ని తిరిగి చేస్తుంది:

ఉదాహరణ 3

function myFunction(a) {
    var
    power = 10;  
    return a * power;
}

亲自试一试

కానీ ఈ విధంగా చేసినప్పుడు: return పద్యాన్ని రెండు వరుసలుగా పరివర్తించి ఏం జరుగుతుంది:

ఉదాహరణ 4

function myFunction(a) {
    var
    power = 10;  
    return
    a * power;
}

亲自试一试

ఈ ఫంక్షన్ ఈ విధంగా తిరిగి చేస్తుంది: undefined!

ఎందుకు? అనగా JavaScript మీ అర్థాన్ని అంగీకరిస్తుంది:

ఉదాహరణ 5

function myFunction(a) {
     var
    power = 10;  
    return;
    a * power;
}

亲自试一试

వివరణ

ఏదైనా పద్యం అనిపించదు ఉంటే:

var

JavaScript వాక్యాన్ని ముగింపు చేయడానికి తదుపరి వరుసను చదువుతుంది:

power = 10;

కానీ ఈ పద్యం పూర్తి ఉంది:

return

JavaScript ఆపాదించిన పద్యాన్ని స్వయంచాలకంగా మూసుతుంది:

return;

ఈ పరిస్థితి జరిగే కారణం ఇది జావాస్క్రిప్ట్ లో పద్యాన్ని మూసివేయడానికి సెకండ్ అనేది ఆప్టియనల్ ఉంటుంది

JavaScript వాక్యం చివరి వద్ద మూసుతుంది return పద్యం అది ఒక పూర్తి పద్యం కావాలి

కాబట్టి మనిషిగా కాదు return పద్యాన్ని పరివర్తించండి

పేరు సూచిక ద్వారా అర్రె ను ప్రాప్తించండి

అనేక ప్రోగ్రామింగ్ భాషలు నామక సంకేతాలు కలిగిన ప్రక్రియను మద్దతు ఇస్తాయి.

నామక సంకేతాలు కలిగిన ప్రక్రియను అనుసరించబడుతుంది లేదా హుమ్మతలు (లేదా హాష్ టేబుల్).

JavaScript మద్దతు లేదునామక సంకేతాలు కలిగిన ప్రక్రియా

జావాస్క్రిప్టులోప్రక్రియాఉపయోగించండిసంఖ్యా సంకేతాలు:

实例

var person = [];
person[0] = "Bill";
person[1] = "Gates";
person[2] = 46;
var x = person.length;          // person.length 3 ఉంటుంది
var y = person[0];              // person[0] "Bill" ఉంటుంది

亲自试一试

జావాస్క్రిప్టులోపరికల్పనఉపయోగించండినామక సంకేతాలు

మీరు నామక సంకేతాలను ఉపయోగించినట్లయితే, ప్రక్రియాను సంకేతాలకు మార్చడం జరుగుతుంది అని జావాస్క్రిప్టు చేస్తుంది.

స్వయంచాలక పునర్నిర్వచన తర్వాత, ప్రక్రియా పద్ధతులు లేదా అంశాలు అనిర్దిష్టం లేదా అసమానమైన ఫలితాలను ఇవ్వవచ్చు:

实例

var person = [];
person["firstName"] = "Bill";
person["lastName"] = "Gates";
person["age"] = 46;
var x = person.length;         // person.length అనిర్దిష్టం ఉంటుంది
var y = person[0];              // person[0] అనిర్దిష్టం ఉంటుంది

亲自试一试

పద్ధతి నిర్వచనానికి కాండి కాండి కాండి ఉపయోగించండి

పరికల్పన మరియు ప్రక్రియా నిర్వచనాలలో తలిపు కాండి పద్ధతి ECMAScript 5 లో అనుమతించబడుతుంది.

పరికల్పన ప్రతిరూపం:

person = {firstName:"Bill", lastName:"Gates", age:62,};

ప్రక్రియా ప్రతిరూపం:

points = [35, 450, 2, 7, 30, 16,];

హెచ్చరిక: !!

ఇంటర్నెట్ ఎక్స్ప్లోరర్ 8 పరిణామం కావచ్చు.

JSON తలిపు కాండి కాదు.

JSON:

person = {firstName:"Bill", lastName:"Gates", age:62};

JSON:

points = [35, 450, 2, 7, 30, 16];

అనిర్దిష్టం నల్లటి కాదు

జావాస్క్రిప్టు పరికల్పన, వేరియబుల్, అంశాలు మరియు పద్ధతులు అనిర్దిష్టం ఉండవచ్చు.

ఇంటర్నెట్ ఎక్స్ప్లోరర్ 8 పరిణామం కావచ్చు. null

ఇది పరీక్షించబడే పరికల్పన పొందికను కష్టంగా చేయవచ్చు.

మీరు పరీక్షించవచ్చు రకం అని కాకపోతే: undefinedఈ పరికల్పనను పరీక్షించండి అని పరీక్షించండి ఉన్నది లేదు:

实例

if (typeof myObj === "undefined")

亲自试一试

但是您无法测试对象是否为 null,因为如果对象未定义,将抛出错误:

不正确的:

if (myObj === null)

要解决此问题,必须测试对象是否为 null,而不是未定义。

但这仍然会引发错误:

不正确的:

if (myObj !== null && typeof myObj !== "undefined")

因此,在测试非 null 之前,必须先测试未定义:

正确的:

if (typeof myObj !== "undefined" && myObj !== null)

亲自试一试

期望块级范围

JavaScript 不会为每个代码块创建新的作用域。

很多编程语言都是如此,但是 JavaScript 并非如此

认为这段代码会返回 undefined,是新的 JavaScript 开发者的常见错误:

实例

for (var i = 0; i < 10; i++) {
  // 代码块
}
return i;

亲自试一试