Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 敲除中的简单字符串替换_Javascript_String_Knockout.js - Fatal编程技术网

Javascript 敲除中的简单字符串替换

Javascript 敲除中的简单字符串替换,javascript,string,knockout.js,Javascript,String,Knockout.js,当我试图用一个可观察的字符串替换一个简单的字符串时,我总是遇到以下错误 str.replace不是一个函数 这是我的意思的一个例子。我得到了以下可观察到的结果,效果很好: this.price = ko.observable(data.price); this.priceFloat = ko.computed(function() { return parseFloat( Math.abs(viewModel.price()) ).toFixed(2); }, this); 至于为什么我需要一

当我试图用一个可观察的字符串替换一个简单的字符串时,我总是遇到以下错误

str.replace不是一个函数

这是我的意思的一个例子。我得到了以下可观察到的结果,效果很好:

this.price = ko.observable(data.price);
this.priceFloat = ko.computed(function() {
return parseFloat( Math.abs(viewModel.price()) ).toFixed(2);
}, this);
至于为什么我需要一个相同数字的计算版本和可观察版本是另一个问题。现在我需要删除逗号,这是非常基本的。我只是在我的控制台上做了这件事,它成功了

var str = "3,047";
var nw = str.replace(',', '');
console.log(nw);
但是当我把它放在computed函数中时,它会返回错误

this.price = ko.observable(data.price);
this.priceFloat = ko.computed(function() {
    var str = viewModel.price();
    var nw = str.replace(',', '');
    console.log(nw);
return parseFloat( Math.abs(viewModel.price()) ).toFixed(2);
}, this);
我也尝试了以下操作,但没有成功,它仍然返回相同的错误

ko.extenders.removeComma = function(target) {

  var result = ko.computed({
    read: function () { return target(); },
    write: function (v) { 
      target(v.replace(/\,/g, ''));
    }
  });
  return result;
};
this.price = ko.observable(data.price).extend({removeComma: ""});

有人知道为什么会这样吗?任何解释都将不胜感激。

很可能是因为可观察对象返回的值不是导致此错误的字符串。请参见下面的处理方法:

this.price = ko.observable(data.price);
this.priceFloat = ko.computed(function() {
    var str = viewModel.price() ? viewModel.price().toString() : '';
    var nw = str.replace(',', '');
    console.log(nw);
return parseFloat( Math.abs(viewModel.price()) ).toFixed(2);
}, this);
编辑:


很可能是因为可观察对象返回的不是字符串的值会导致此错误。请参见下面的处理方法:

this.price = ko.observable(data.price);
this.priceFloat = ko.computed(function() {
    var str = viewModel.price() ? viewModel.price().toString() : '';
    var nw = str.replace(',', '');
    console.log(nw);
return parseFloat( Math.abs(viewModel.price()) ).toFixed(2);
}, this);
编辑:


在这里,你可以这样使用

<!-- ko text: address().telephone.toString().replace(/(\d{3})(\d{3})(\d{4})/, "($1) $2-$3") --><!-- /ko --><br/>

在这里,你可以这样使用

<!-- ko text: address().telephone.toString().replace(/(\d{3})(\d{3})(\d{4})/, "($1) $2-$3") --><!-- /ko --><br/>

请注销console.logstr;在调用replace之前,您将看到viewModel.price返回的内容@Rachelle Uy您能发布您收到的错误消息吗?@nemesv我知道,然后在字符串替换函数之后,它就不起作用了:@FeistyMango它和str一样简单。replace不是一个函数。请注销console.logstr;在调用replace之前,您将看到viewModel.price返回的内容@Rachelle Uy您能发布您收到的错误消息吗?@nemesv我知道,然后在字符串替换函数之后,它就不起作用了:@FeistyMango很简单str.replace不是函数如果str是未定义的,那么错误消息将是无法调用未定义的方法“replace”,而不是str.replace不是函数…@nemesv你是对的。事实上,值不是未定义的或空的,而是错误的类型。更新的代码与之匹配。如果str未定义,则错误消息将是无法调用未定义且非str的方法“replace”。replace不是一个函数…@nemesv您是对的。事实上,值不是未定义的或空的,而是错误的类型。已更新代码以匹配该选项。