C++ 比较v8字符串(Node.js加载项)
我有这个:C++ 比较v8字符串(Node.js加载项),c++,v8,C++,V8,我有这个: if (!args[2]->IsString() || (*args[2]->ToString() != "true" && *args[2]->ToString() != "false")) { Nan::ThrowTypeError("Third argument to 'replace-line' must be a string representing whether to find or replace.");
if (!args[2]->IsString() || (*args[2]->ToString() != "true" && *args[2]->ToString() != "false")) {
Nan::ThrowTypeError("Third argument to 'replace-line' must be a string representing whether to find or replace.");
return;
}
但我得到一个编译错误和警告:
../hello.cpp:49:58: error: comparison between distinct pointer types ‘v8::String*’ and ‘const char*’ lacks a cast [-fpermissive]
../hello.cpp:49:92: warning: comparison with string literal results in unspecified behaviour [-Waddress]
if (!args[2]->IsString() || (*args[2]->ToString() != "true" && *args[2]->ToString() != "false")) {
如何正确比较v8字符串与普通C字符串?您可以使用
v8::String::NewFromOneByte
进行转换详细信息如果需要,还可以使用其他源代码
如果您想换一种方式,您可能需要创建自己的缓冲区并使用
WriteOneByte
您可以使用v8::String::NewFromOneByte
进行转换。如果您需要,还可以使用其他源代码
如果您想换一种方式,那么看起来您必须创建自己的缓冲区并使用WriteOneByte
您可以构造一个类似v8::String::Utf8Value arg(args[2]->ToString())
,并将其与C字符串文本进行比较(尽管事件使用strcmp/strncmp
而不是=
或从中构造std::string
。您可以构造一个类似v8::string::Utf8Value arg(args[2]->ToString())
,并将其与C字符串文本进行比较(尽管事件使用strcmp/strncmp
而不是=
,或者从中构造一个std::string
。V8用于Javascript
如何正确比较Javascript中的两个字符串
"String 1" === "String 2"
value1 === value2
如何正确比较Javascript中的两个值
"String 1" === "String 2"
value1 === value2
在C++中也可以使用<代码> = = = /代码>的魔力。 不要提取内部字符值进行比较。 比较(
==
)v8::Values.
假设args[2]
是v8::Local
而不是空句柄,则可以执行以下操作:
Isolate *isolate = Isolate::GetCurrent();
v8::Local<v8::String> h_true = v8::String::NewFromUtf8(isolate, "true");
v8::Local<v8::String> h_false = v8::String::NewFromUtf8(isolate, "false");
if(args[2]->StrictEquals(h_true) || args[2]->StrictEquals(h_false) == false)
{
v8::Local<v8::String> h_error_message = v8::String::NewFromUtf8(
isolate,
"The argument must be a \"true\" or a \"false\"."
);
v8::Local<v8::Error> h_error = v8::Exception::RangeError(h_error_message);
isolate->ThrowException(h_error);
return;
}
您甚至不必检查参数是否是字符串,也不必检查它是否由调用方提供。V8用于Javascript
如何正确比较Javascript中的两个字符串
"String 1" === "String 2"
value1 === value2
如何正确比较Javascript中的两个值
"String 1" === "String 2"
value1 === value2
在C++中也可以使用<代码> = = = /代码>的魔力。 不要提取内部字符值进行比较。 比较(
==
)v8::Values.
假设args[2]
是v8::Local
而不是空句柄,则可以执行以下操作:
Isolate *isolate = Isolate::GetCurrent();
v8::Local<v8::String> h_true = v8::String::NewFromUtf8(isolate, "true");
v8::Local<v8::String> h_false = v8::String::NewFromUtf8(isolate, "false");
if(args[2]->StrictEquals(h_true) || args[2]->StrictEquals(h_false) == false)
{
v8::Local<v8::String> h_error_message = v8::String::NewFromUtf8(
isolate,
"The argument must be a \"true\" or a \"false\"."
);
v8::Local<v8::Error> h_error = v8::Exception::RangeError(h_error_message);
isolate->ThrowException(h_error);
return;
}
您甚至不必检查参数是否是字符串,也不必检查它是否由调用方提供。