Javascript Number()和toUpperCase()函数之间的差异

Javascript Number()和toUpperCase()函数之间的差异,javascript,Javascript,Number()和toUpperCase()看起来都像函数,但它们不能以相同的方式编写。我肯定错过了一个明显的概念,但我不知道它是什么 例如,下面的代码工作得非常完美 var a = "cat"; var b = "dog"; console.log(a.toUpperCase() + b.toUpperCase()); 结果是猫狗 但是这段代码抛出了一个错误 var a = 5; var b = 10; console.log(a.Number() + b.Number()); a = "

Number()和toUpperCase()看起来都像函数,但它们不能以相同的方式编写。我肯定错过了一个明显的概念,但我不知道它是什么

例如,下面的代码工作得非常完美

var a = "cat";
var b = "dog";
console.log(a.toUpperCase() + b.toUpperCase());
结果是猫狗

但是这段代码抛出了一个错误

var a = 5;
var b = 10;
console.log(a.Number() + b.Number());
a = "cat";
b = "dog";

console.log(toUpperCase(a) + toUpperCase(b));
a.数字不是函数

但当我在google Number()上搜索时,它被列为一个函数

有趣的是,当我反转代码时,它会抛出一个错误

var a = 5;
var b = 10;
console.log(a.Number() + b.Number());
a = "cat";
b = "dog";

console.log(toUpperCase(a) + toUpperCase(b));
toUpperCase未定义

Number()也可以正常工作

a = 5;
b = 10;

console.log(Number(a) + Number(b));

你应该读一些关于OOP(面向对象编程)的书

是的,
Number
是一个函数,但是
a.Number
(意思是
int.Number
)不是。当您编写
a.Number()
时,您正在调用对象
a
的函数
Number
,该函数不起作用,因为
integer
数据类型(
a
变量)没有此类函数

编辑:(这是关于一般的OOP,而不是特定于JavaScript的)

Number
函数是一个全局函数,它是任何编程/脚本编写的基础。它是在某个地方定义的,您可以在其他地方调用它。另外,您可以向它传递参数,它可以返回一些值。例如:

function getHigherNumber(num) {
    return num + 1;
}

var foo = 5;
console.log(getHigherNumber(foo)); // writes "6"
函数getHigherNumber接受一个数字作为参数,并返回增加1的数字

还有方法,它们不是全局的,但只与定义它们的数据类型/类关联。例如
string.toUpperCase()
。这里,“string”是一种原始数据类型,它还定义了一些方法(即
toUpperCase
)。然后创建一个对象
var bar=“some text”并调用其上的方法:
bar.toUpperCase()
请注意对象与其调用的方法之间的点


希望您现在能更好地理解它,如果我的一些解释不完全准确,请原谅。

正如您在发布的链接中所看到的,它指的是函数而不是方法。 您可以在提供该方法的对象上使用该方法

例如:

function getHigherNumber(num) {
    return num + 1;
}

var foo = 5;
console.log(getHigherNumber(foo)); // writes "6"
toUpperCase
是一种方法,因为它是在String.prototype中提供的。所以你可以用在

"Prova".toUppercase();
因为
“Prova”
继承了String.prototype的方法

toFixed
是一种方法,因为它是在Number.prototype中提供的。所以你可以用这种方式

var x = 9.656;
x.toFixed(0);   
函数类似于代码块的简单定义:

function myUpperCase(myString) {
   return myString.toUpperCase(myString);
}
然后,在代码中,您可以这样使用它:

myUpperCase("cat");
是作为方法内置到字符串原型中的函数。因此,使用以下语法调用它:

String.toUpperCase();
另一方面,

Number();

是一个内置于JavaScript语言中的函数。由于未将其定义为方法,因此在调用时不会将其作为方法调用。

您使用
Number
作为
Number
的方法
Number()
是一个全局函数
a.Number
是一个实例函数,
toUpperCase
字符串的一部分。prototype
这是错误的。。。
a.Number()
b.Number()
中使用的变量不是字符串@Martin Heralecký谢谢Martin,但如果我将代码更改为
console.log(数字(a)+数字(b))它可以工作。为什么它是这样写的,而不是第一种方式?有趣的是,当我编写
console.log(toUpperCase(a)+toUpperCase(b))这也会引发一个错误。@DR01D我添加了一些解释。希望对您有所帮助。@DR01D函数和方法都可以接受参数,也可以不接受参数。这只取决于它们是如何定义的。不带参数的函数/方法的“不必要的”
()
,只是语言语法的问题。可能有一种语言,当没有参数传递时,您不需要编写
()
。@DR01D例如:
var foo=“Hello,World”;console.log(foo.substring(7))写“世界”。@lqueso101谢谢,我想我可能会取得一些进展。那么Number()是一个函数,toUpperCase()是一个方法?我应该记住不同的函数和方法吗?还是有一个明显的模式可以很容易地区分这两个?太有趣了!一个是函数,另一个是方法。有没有一个明显的方法来区分它们,或者这是一个大量记忆的例子?你应该在你的目标上发现它。例如:如果您有一个具有
status
属性的Car对象,并且您想要更改它,那么您应该在Car对象中实现一个方法(changeStatus(newStatus)Car.changeStatus(“active”))。相反,如果您有两个具有
price
属性的Car对象,并且希望求和这些值,则可以创建一个方法(
函数sumCarPrice(Car1,Car2){return Car1.price+Car2.price);}