Javascript Slice()未按预期工作

Javascript Slice()未按预期工作,javascript,Javascript,嗯,我到处都查过了,但还是没能剪掉。。。从我的谷歌地图网站,这是可行的,但我的努力“切片”变量“点”没有 这不起作用-未捕获类型错误:point.slice不是函数 示例: point = point.slice(1, -1); +point+ (print out the result) var str; str = point; str = str.slice(1, -1); +str+ (print out the result) 这不起作用-未捕获类型错误:str.

嗯,我到处都查过了,但还是没能剪掉。。。从我的谷歌地图网站,这是可行的,但我的努力“切片”变量“点”没有

这不起作用-未捕获类型错误:point.slice不是函数


示例:

 point = point.slice(1, -1);

 +point+ (print out the result)
 var str;
 str =  point;
 str = str.slice(1, -1);
 +str+ (print out the result)
这不起作用-未捕获类型错误:str.slice不是函数


示例: 这确实有效:

 var str;
 str = "(28.7035649, -105.9697253)";
 str = str.slice(1, -1);
 +str+ (print out the result)
打印出的28.7035649,-105.9697253正确-无括号


这里有什么线索吗?

第一个示例中的返回值是一个
对象
,并且对象没有定义
切片
方法,但定义了字符串,这就是最后一个示例工作的原因

在第二个示例中,您将相同的
对象指定给未转换为字符串的
str
变量。

LatLng类具有
lat()
lng()
方法,您可以使用这些方法来获取这些值:

var lat = point.lat();
var lng = point.lng();

请参阅。

如其他答案中所述,切片是字符串的方法,您可以在对象上使用它。您可以做什么:

point.toString().slice(1, -1);
见文件

编辑:

请注意,
point.toString()
不会更改实际的
point
变量,它返回一个表示该点的字符串,以便您可以将其分配给新变量,例如
var pointString=point.toString()


pointString.slice(1,-1)
point.toString().slice(1,-1)
也会发生同样的情况,您需要一个变量来保存该数据,例如
var myPoint=point.toString().slice(1,-1)
。您也可以重用
point
变量,如
point=point.toString().slice(1,-1)
,但您失去了对原始point对象的引用。

问题是您试图访问LatLng对象的不存在方法。另请注意,这是一个重复的问题

很快使用下面的解决方案来字符串化LatLng对象(来源:上面的链接),并将
slice
方法应用于下面函数的结果

function formatData(data) {
    //data is an array of many LatLng objects

    newData = [];

    for(var i = 0; i < data.length; i++) {
        var obj = new Object();
        obj['lat'] = data[i].lat();
        obj['lon'] = data[i].lng();
        newData.push(obj);
    }

    return JSON.stringify(newData);     
}
函数格式数据(数据){
//数据是由许多LatLng对象组成的数组
新数据=[];
对于(变量i=0;i
我的问题“Slice()未按预期工作”已经得到了回答,关于谷歌地图的其他问题将需要一个新问题

为了明确答案,madox2虽然语法正确,但不适用于谷歌地图“点””:

point.toString()切片(1,-1) 打印出,括号仍然存在

以下方法确实有效:

 var str;
 str = "(28.7035649, -105.9697253)";
 str = str.slice(1, -1);
 +str+ (print out the result)
var newpoint=point.toString().slice(1,-1) 打印出newpoint,括号就不见了


我还没有收到关于原因的解释,但我感谢大家的回答。(回到PHP-一切都可以原谅!)

我想说对象不支持slice函数,因为slice是用于字符串的
slice()
是javascript
string
array
的一种方法,但是你有
google.maps.LatLng
object这给了流浪狗一个解决方案,但你的答案应该是为什么它是正确的解决方案。几乎正确,但正如恩科德所说,我“还不理解它”。。。point.toString()切片(1,-1);在我的环境中不去掉括号,但var NEWPOINT=point.toString().slice(1,-1);做我可以正确打印值21.1210537,-101.6823321,但是(图像)大小=100x62,位置=新点&航向=新航向&螺距=0;确实产生了一个缩略图,但它是一个未知的位置,所以我仍然感到困惑,除非结果与谷歌的API有关。(NEWHEADING也适用于pitch)感谢Gothdo的评论和建议,您的代码确实提供了lat,lng,但是在谷歌街景API中使用它不会产生结果(“我们没有该位置的图像”)(图像)大小=100x62,位置=lat,lng&heading=heading&pitch=0;使用上面的slice()方法确实会生成街景位置缩略图,但我不知道该位置。这在php中工作,并显示正确的街景缩略图-但不是在javascript中,这正是我在这里试图实现的。我想我可以在我的javascript中嵌入php,但这给我的印象是糟糕的做法和不必要的。谢谢你,安德烈,但我并没有尝试“字符串化”,我只是尝试从“point”变量中删除括号-而这可能涉及到将变量临时转换为字符串以执行操作是真的,但您的代码示例(恕我直言)与此无关。@谢谢您的评论,我会在有时间时更新代码