Typescript .length返回undefined

时间:2016-02-22 10:35:31

标签: typescript angular

这个问题让我发疯了......

我有这段代码:

if (control.value==null||control.value == "" || control.value == " " || control.value.length != 5) {
     // do something
}

我的问题:control.value.length总是返回'undefined'。

我尝试使用这样的字符串变量,但结果是一样的。

var curVal: string = control.value;
if (curVal==null||curVal== "" || curVal == " " || curVal != 5) {
     // do something
}

我哪里错了?

编辑:精度:我的control.value不为null或为空,我使用值59000进行测试

此代码:

console.log(control.value + ' - ' + control.value.length);

记录下来: 59000 - 未定义

编辑2:谢谢你,它已经解决了。问题是我的control.value是数字而不是字符串

5 个答案:

答案 0 :(得分:4)

我认为输入的类型不是字符串而是数字。

@Component({
  selector: 'my-app',
  template: `
    <div>
      <input type="number" [ngFormControl]="ctrl">
    </div>
  `
})
export class AppComponent {
  constructor() {
    this.ctrl = new Control();
    this.ctrl.valueChanges.subscribe((val) => {
      console.log(val.length);
    });
  }
}

在这种情况下,val.length会返回undefined,因为数字没有length属性。

有关详细信息,请参阅此plunkr:https://plnkr.co/edit/5yp5ms9XY5Z3TEE2qYIh?p=preview

答案 1 :(得分:1)

在打字稿中:

     let a="hello";
     let length=a.toString().length;
     console.log(length);

输出:5

答案 2 :(得分:0)

有时在Angular上有这个bug,因为版本5.0.0我认为,即使变量不是数字,我也要将它转换为数字以使用'。length'属性,如下所示:

if (control.value==null||control.value == "" || control.value == " " || +(control.value.length) != 5) {
 // do something

它可能有效,只需在var.length之前添加符号'+',如:+(var.length)

答案 3 :(得分:0)

之前我遇到过同样的问题,在我的情况下,我的对象设置了一个带小写的字符串&#34; s&#34;因此是一个Angular原语。 你需要在长度之前添加toString():control.value.toString()。length。

答案 4 :(得分:0)

像这样尝试

String(control.value).length != 5

OR

control.value.toString().length != 5